public class SecurityKeyGenerator
{
public static void main(String[] args)
throws IOException, NoSuchAlgorithmException, ClassNotFoundException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException
{
// InputStream in = System.in;
// InputStreamReader isr = new InputStreamReader(in);
// BufferedReader br = new BufferedReader(isr);
// String[] para = br.readLine().split(" ");
// String s = para[0];// 明文
// int key = Integer.parseInt(para[1]); // 移动位数
// 创建对称密钥生成器
KeyGenerator kg = KeyGenerator.getInstance("DESede");
// 指定密钥长度
kg.init(168);
// 生成密钥,用于加密和解密
SecretKey k = kg.generateKey();
// 将密钥保存到文件中(以对象方式存储)
FileOutputStream f = new FileOutputStream("key1.dat");
ObjectOutputStream b = new ObjectOutputStream(f);
b.writeObject(k);
// 获取密钥编码格式(以字节方式存储)
byte[] kb = k.getEncoded();
// 将编码格式存入文件中
FileOutputStream f2 = new FileOutputStream("keykb1.dat");
f2.write(kb);
System.out.println("密钥:");
// 打印密钥编码中的内容
for (int i = 0; i < kb.length; i++)
{
System.out.print(kb[i] + ",");
}
// /////////////////用密钥加密字符串
// 得到密钥
FileInputStream f22 = new FileInputStream("key1.dat");
ObjectInputStream b2 = new ObjectInputStream(f22);
Key k2 = (Key)b2.readObject();
// 初始化密码器,使用DESede加密算法,密钥要是使用DESede计算出来的密钥
Cipher cp = Cipher.getInstance("DESede");
cp.init(Cipher.ENCRYPT_MODE, k2);
// 将将要加密的明文转换成字节,进行加密
String minwen = "Hello World!";
byte ptext[] = minwen.getBytes("UTF8");
byte ctext[] = cp.doFinal(ptext);
System.out.println();
System.out.println("密文:");
for (int i = 0; i < ctext.length; i++)
{
System.out.print(ctext[i] + ",");
}
FileOutputStream fmiwen = new FileOutputStream("SEnc.dat");
fmiwen.write(ctext);
// // /////////////////用密钥解密刚才加密的字符串
// 获取密文
FileInputStream fin = new FileInputStream("SEnc.dat");
int num = fin.available();
byte[] ctextin = new byte[num];
fin.read(ctextin);
System.out.println();
System.out.println("读取到的密文是:");
for (int i = 0; i < ctextin.length; i++)
{
System.out.print(ctextin[i] + ",");
}
// 获取密钥
FileInputStream f222 = new FileInputStream("keykb1.dat");
int num2 = f222.available();
byte[] keykb = new byte[num2];
f222.read(keykb);
SecretKeySpec kjiemi = new SecretKeySpec(keykb, "DESede");
// 对密文进行解密
Cipher cpjiemi = Cipher.getInstance("DESede");
cpjiemi.init(Cipher.DECRYPT_MODE, kjiemi);
byte[] ptextjiemi = cpjiemi.doFinal(ctextin);
String jiemi = new String(ptextjiemi, "UTF-8");
System.out.println();
System.out.println("解密后明文:");
System.out.println(jiemi);
}
}
|