package com.secretkey;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class SecretKeyTest {
public static void main(String[] args) throws Exception{
SecrectEncrypt();
SecretDecrpy();
}
private static void SecrectEncrypt() throws Exception {
Cipher cipher=Cipher.getInstance("AES");
SecretKey key=KeyGenerator.getInstance("AES").generateKey();
//Key子类 SecretKey,publicKey/PrivateKey
//SecretKey key = SecretKeyFactory.getInstance("AES").generateSecret(arg0);
//保存密钥
FileOutputStream foskey = new FileOutputStream("c://k.txt");
ObjectOutputStream ooskey = new ObjectOutputStream(foskey);
ooskey.writeObject(key);
ooskey.close();
foskey.close();
//加密
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] results = cipher.doFinal("aaa".getBytes());
//保存加密后的数据
FileOutputStream fosDate = new FileOutputStream("c://data.txt");
fosDate.write(results);
fosDate.close();
}
private static void SecretDecrpy() throws Exception {
Cipher cipher = Cipher.getInstance("AES");
FileInputStream fiskey=new FileInputStream("c://k.txt");
ObjectInputStream oiskey =new ObjectInputStream(fiskey);
Key key=(Key)oiskey.readObject();
oiskey.close();
fiskey.close();
cipher.init(Cipher.DECRYPT_MODE, key);
FileInputStream fisdate = new FileInputStream("c://data.txt");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
copyStream(fisdate, baos);
byte[] result = cipher.doFinal(baos.toByteArray());
fisdate.close();
baos.close();
System.out.println(new String(result));
}
private static void copyStream(InputStream ips,OutputStream ops) throws Exception {
byte[] buf = new byte[1024];
int len=ips.read(buf);
while (len !=- 1) {
ops.write(buf, 0,len);
len = ips.read(buf);
}
}
}