Java非对称加密(公钥加密,私钥解密)
发布时间:2020-12-14 23:38:46 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.
|
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 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,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,FileNotFoundException {
ObjectOutputStream outputStream = new ObjectOutputStream(
new FileOutputStream(new File("E://private_key")));
outputStream.writeObject(privateKey);
}
}
以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
