Java非對稱加密(公鑰加密,私鑰解密)
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; import javax.crypto.Cipher;/**
- 公鑰加密,私鑰解密(非對稱加密)
*/ public class AsymmetricEncryption {
public static void main(String[] args) throws Exception {
publicEnrypy(); privateEncode();
}
/**
- 加密的方法,使用公鑰進行加密
@throws Exception */ public static void publicEnrypy() throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
// 生成鑰匙對 KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 得到公鑰 Key publicKey = keyPair.getPublic();
// 得到私鑰 Key privateKey = keyPair.getPrivate();
// 設置為加密模式 cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// 對數據進行加密 byte[] result = cipher.doFinal("aaa".getBytes());
//把私鑰保存到硬盤上 saveKey(privateKey);
//把加密后的數據保存到硬盤上 saveData(result); }
/**
- 解密的方法,使用私鑰進行解密
@throws Exception */ public static void privateEncode() throws Exception { Cipher cipher = Cipher.getInstance("RSA");
// 從硬盤中讀取私鑰 Key privateKey = loadKey();
//設置為解密模式,用私鑰解密 cipher.init(Cipher.DECRYPT_MODE, privateKey);
// 從硬盤中讀取加密后的數據 byte[] data = loadData();
//對加密后的數據進行解密,返回解密后的結果 byte[] result = cipher.doFinal(data);
System.out.println(new String(result)); }
/**
- 從硬盤中加載加密后的文件
- @return
- @throws FileNotFoundException
@throws IOException */ private static byte[] loadData() throws FileNotFoundException, IOException { FileInputStream fileInputStream = new FileInputStream(new File(
"E://data.data"));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024]; int len = 0;
while ((len = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
fileInputStream.close();
return outputStream.toByteArray(); }
/**
- 從硬盤中加載私鑰
- @return
- @throws IOException
- @throws FileNotFoundException
@throws ClassNotFoundException */ private static Key loadKey() throws IOException, FileNotFoundException,
ClassNotFoundException {
ObjectInputStream inputStream = new ObjectInputStream(
new FileInputStream(new File("E://private_key")));
Key privateKey = (Key) inputStream.readObject(); return privateKey; }
/**
- 把加密后的密文保存到硬盤上
- @param result
- @throws FileNotFoundException
@throws IOException */ private static void saveData(byte[] result) throws FileNotFoundException,
IOException {
FileOutputStream fileOutputStream = new FileOutputStream(new File(
"E://data.data"));
fileOutputStream.write(result); }
/**
- 把私鑰保存到硬盤上
- @param privateKey
- @throws IOException
- @throws FileNotFoundException
*/
private static void saveKey(Key privateKey) throws IOException,
ObjectOutputStream outputStream = new ObjectOutputStream(FileNotFoundException {
outputStream.writeObject(privateKey); }new FileOutputStream(new File("E://private_key")));
}</pre>