package com.test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import javax.crypto.Cipher;
public class CipherRSA {
public static void main(String[] args) throws Exception {
new CipherRSA().publicEncrypt();
new CipherRSA().privateDecrypt();
}
public void publicEncrypt() throws Exception{
Cipher cipher = Cipher.getInstance("RSA");
KeyPairGenerator keypairGenerator = KeyPairGenerator.getInstance("RSA");
KeyPair keyPair = keypairGenerator.generateKeyPair();
Key publicKey = keyPair.getPublic();
Key privateKey = keyPair.getPrivate();
saveKey(privateKey, "private_key");
cipher.init(Cipher.ENCRYPT_MODE,publicKey);
byte[] data = cipher.doFinal("测试数据".getBytes("UTF-8"));
saveData(data,"public_data");
}
public void privateDecrypt() throws Exception{
Cipher cipher = Cipher.getInstance("RSA");
Key privateKey = readKey("private_key");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] data = readData("public_data");
byte[] rs = cipher.doFinal(data);
System.out.println(new String(rs,"UTF-8"));
}
public void saveData(byte[] data, String fileName) throws Exception{
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(data);
oos.close();
fos.close();
}
public void saveKey(Key key, String fileName) throws Exception{
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(key);
oos.close();
fos.close();
}
public Key readKey(String fileName) throws Exception{
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
Key privateKey = (Key)ois.readObject();
return privateKey;
}
public byte[] readData(String fileName) throws Exception{
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
byte[] data = (byte[])ois.readObject();
return data;
}
}
公私钥加密解密
最新推荐文章于 2025-06-06 18:36:41 发布