求基于流的加密源代码

topbit 2003-08-26 09:48:49
求基于流的加密源代码。
...全文
78 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
NetixChina 2003-08-27
  • 打赏
  • 举报
回复
package sample.crypto;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ByteArrayOutputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.KeyGenerator;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.BadPaddingException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.IllegalBlockSizeException;

public final class StreamCryptographerSample
extends Object
{
public static void main(String[] args)
throws IOException,
BadPaddingException,
InvalidKeyException,
ClassNotFoundException,
NoSuchPaddingException,
NoSuchAlgorithmException,
IllegalBlockSizeException
{
CipherInputStream inCipher = null;
CipherOutputStream outCipher = null;

KeyGenerator keyGenerator = null;
SecretKey key = null;
InputStream in = null;
OutputStream out = null;

Cipher cipher = null;
byte[] source = null;
byte[] result = null;

String sourceFileName = null;
String resultFileName = null;
String keyFileName = null;

for (int i = 0; i<CRYPTOGRAPHERS.length; i++)
{
sourceFileName =
SOURCE_FILE_NAME+CRYPTOGRAPHERS[i]+".txt";
resultFileName =
RESULT_FILE_NAME+CRYPTOGRAPHERS[i]+".txt";
keyFileName =
KEY_FILE_NAME+CRYPTOGRAPHERS[i]+".txt";

keyGenerator = KeyGenerator.getInstance(
CRYPTOGRAPHERS[i]);
saveKey(keyGenerator, keyFileName);
key = loadKey(keyFileName);

cipher = Cipher.getInstance(CRYPTOGRAPHERS[i]);
cipher.init(Cipher.ENCRYPT_MODE, key);

in = new FileInputStream(getSourceFile());
inCipher = new CipherInputStream(in, cipher);
result = loadInputStream(inCipher);
inCipher.close();
in.close();

saveResult(result, resultFileName);

cipher = Cipher.getInstance(CRYPTOGRAPHERS[i]);
cipher.init(Cipher.DECRYPT_MODE, key);
out = new FileOutputStream(sourceFileName);
outCipher = new CipherOutputStream(out, cipher);

result = loadResult(resultFileName);
outCipher.write(result);
outCipher.close();
out.close();
}
}

private static void saveSource(
byte[] source,
String fileName)
throws IOException
{
FileOutputStream outFile =
new FileOutputStream(fileName);
outFile.write(source);
outFile.close();
}

private static byte[] loadSource(File file)
throws IOException
{
FileInputStream inFile = new FileInputStream(file);
ByteArrayOutputStream outByteArray =
new ByteArrayOutputStream();
int i = -1;
while ((i = inFile.read())!=-1)
outByteArray.write((byte)i);
return outByteArray.toByteArray();
}

private static File getSourceFile()
throws IOException
{
return new File("Source.txt");
}

private static void saveResult(
byte[] result,
String fileName)
throws IOException
{
FileOutputStream outFile =
new FileOutputStream(fileName);
outFile.write(result);
outFile.close();
}

private static byte[] loadResult(
String fileName)
throws IOException
{
FileInputStream inFile = new FileInputStream(fileName);
ByteArrayOutputStream outByteArray =
new ByteArrayOutputStream();
int i = -1;
while ((i = inFile.read())!=-1)
outByteArray.write((byte)i);
return outByteArray.toByteArray();
}

private static void saveKey(
KeyGenerator keyGenerator,
String keyFileName)
throws IOException
{
FileOutputStream outFile =
new FileOutputStream(keyFileName);
ObjectOutputStream outObject =
new ObjectOutputStream(outFile);

SecretKey key = keyGenerator.generateKey();
outObject.writeObject(key);

outObject.close();
outFile.close();
}

private static SecretKey loadKey(
String keyFileName)
throws IOException,
ClassNotFoundException
{
FileInputStream inFile =
new FileInputStream(keyFileName);
ObjectInputStream inObject =
new ObjectInputStream(inFile);
Object object = inObject.readObject();
return (SecretKey)object;
}

private static byte[] loadInputStream(
InputStream in)
throws IOException
{
ByteArrayOutputStream outByteArray =
new ByteArrayOutputStream();
int i = -1;
while ((i = in.read())!=-1)
outByteArray.write((byte)i);
return outByteArray.toByteArray();
}

private static final String[] CRYPTOGRAPHERS =
new String[]
{
"Blowfish",
"DES",
"DESede",
"AES"
};

private static final String KEY_FILE_NAME =
"StreamKey_";

private static final String RESULT_FILE_NAME =
"StreamResult_";

private static final String SOURCE_FILE_NAME =
"StreamSource_";

private StreamCryptographerSample()
{
super();
}
}

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧