RSA加解密工具类RSAUtils.java,使用Hutool(糊涂工具)生成
本RSAUtils类的实现是基于糊涂工具类实现的,糊涂工具在使用下面代码之前一定要导入Hutool的jar包或者maven坐标,我使用的是maven导入的。<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.
·
本RSAUtils类的实现是基于糊涂工具类实现的,糊涂工具
在使用下面代码之前一定要导入Hutool的jar包或者maven坐标,我使用的是maven导入的。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.18</version>
</dependency>
代码如下:
public class RSAUtils {
/**
* 类型
*/
public static final String ENCRYPT_TYPE = "RSA";
/**
* 从文件中读取公钥
* @param filename 公钥保存路径
* @return 公钥字符串
* @throws Exception
*/
public static String getPublicKey(String filename) throws Exception {
//默认UTF-8编码,可以在构造中传入第二个参数做为编码
FileReader fileReader = new FileReader(filename);
String result = fileReader.readString();
return result;
}
/**
* 从文件中读取密钥
* @param filename 私钥保存路径
* @return 私钥字符串
* @throws Exception
*/
public static String getPrivateKey(String filename) throws Exception {
//默认UTF-8编码,可以在构造中传入第二个参数做为编码
FileReader fileReader = new FileReader(filename);
String result = fileReader.readString();
return result;
}
/**
* 公钥加密
* @param content 要加密的内容
* @param publicKey 公钥
*/
public static String encrypt(String content, PublicKey publicKey) {
try {
RSA rsa = new RSA(null, publicKey);
return rsa.encryptBase64(content, KeyType.PublicKey);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 公钥加密
* @param content 要加密的内容
* @param publicKey 公钥
*/
public static String encrypt(String content, String publicKey) {
try {
RSA rsa = new RSA(null, publicKey);
return rsa.encryptBase64(content, KeyType.PublicKey);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 私钥解密
* @param content 要解密的内容
* @param privateKey 私钥
*/
public static String decrypt(String content, PrivateKey privateKey) {
try {
RSA rsa = new RSA(privateKey, null);
return rsa.decryptStr(content, KeyType.PrivateKey);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 私钥解密
* @param content 要解密的内容
* @param privateKey 私钥
*/
public static String decrypt(String content, String privateKey) {
try {
RSA rsa = new RSA(privateKey, null);
return rsa.decryptStr(content, KeyType.PrivateKey);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取公私钥-请获取一次后保存公私钥使用
* @param publicKeyFilename 公钥生成的路径
* @param privateKeyFilename 私钥生成的路径
*/
public static void generateKeyPair(String publicKeyFilename, String privateKeyFilename) {
try {
KeyPair pair = SecureUtil.generateKeyPair(ENCRYPT_TYPE);
PrivateKey privateKey = pair.getPrivate();
PublicKey publicKey = pair.getPublic();
// 获取 公钥和私钥 的 编码格式(通过该 编码格式 可以反过来 生成公钥和私钥对象)
byte[] pubEncBytes = publicKey.getEncoded();
byte[] priEncBytes = privateKey.getEncoded();
// 把 公钥和私钥 的 编码格式 转换为 Base64文本 方便保存
String pubEncBase64 = new BASE64Encoder().encode(pubEncBytes);
String priEncBase64 = new BASE64Encoder().encode(priEncBytes);
FileWriter pub = new FileWriter(publicKeyFilename);
FileWriter pri = new FileWriter(privateKeyFilename);
pub.write(pubEncBase64);
pri.write(priEncBase64);
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试代码如下:
class SpringbootApplicationTests {
String publicKeyFilename = "F:\\rsa\\publicKey.txt";
String privateKeyFilename = "F:\\rsa\\privateKey.txt";
@Test
void test1() throws Exception {
String publicKey = RSAUtils.getPublicKey(publicKeyFilename);
String privateKey = RSAUtils.getPrivateKey(privateKeyFilename);
System.out.println("读取的公钥是:" + publicKey);
System.out.println("读取的私钥是:" + privateKey);
//公钥加密
String encrypt = RSAUtils.encrypt("加密的内容", publicKey);
System.out.println("获取的加密串:" + encrypt);
//私钥解密
String decrypt = RSAUtils.decrypt(encrypt, privateKey);
System.out.println("解密之后的数据:" + decrypt);
}
}
测试结果是:
读取的公钥是:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCB5N0xQn0Bfv578aDg4U2AOfudNygA69/xvj1i
Ei0URCruqY4XXAaNf6+Wlm16wzvKCcxl/wACnD8L1bFRGfLIiyrmkg0QynsyOZloO4o+BmNnnKMP
fdpleaEAiGqAH16TO1uMH10FznLAGWQ5/chPn5gLgnz7iQbUT4vehw9QWQIDAQAB
读取的私钥是:MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIHk3TFCfQF+/nvxoODhTYA5+503
KADr3/G+PWISLRREKu6pjhdcBo1/r5aWbXrDO8oJzGX/AAKcPwvVsVEZ8siLKuaSDRDKezI5mWg7
ij4GY2ecow992mV5oQCIaoAfXpM7W4wfXQXOcsAZZDn9yE+fmAuCfPuJBtRPi96HD1BZAgMBAAEC
gYAKFhx687/DOvpF45hrffNHrrj0F1Fa6PYFzpDzqZeoiDaRO8dV1waHPFAFMH8l1j0xTht6HBgD
G+DlaV2Qf6RTg1xfO7qphIGlcI8bGgrmIPfxgmYKiTxBn1cVE043i2vMO/wLxKcaiGPpihrkfQFc
2I08gr3SnGRKyBNHeUq/EQJBAN80liE9PqXTaWSV+A2QsOhGccJQN2pFzeqef+oBUsWHkhAwLT5l
xpYP49MwnucLoPEhHyAcJr7WLnMGU9bR5SUCQQCU+o9quu6bapEIsvfLE3MRB8ISfHMALF47UVvt
X9P6WDQ9HTJ5mKo+WZuhyNRkEAtlq3Au80AHQ8FCSOWpIsolAj9Gn1zhJ3+q+DlgmhLiN+XBmIhl
8vuVpICCu6O9Zq3J0htlA9lM5ObwlBaBu+CLOiKyKMiwYDfiKeKIgngEgGUCQGxfYJipZw2TlfGY
Dv2hJmFLHXhJI3cKz3mjE5Y30YIZS9bxOFiQH7e/g6FK8IXhzgilj7P3q6odNaa8VKSW9CkCQQDS
GxaEW5ryqpVJ0lZwL59Ben+XsXWQwWYyYrko9Yg2EnMC5XkNE74l8w69NMyrQUfQO6tPqHkwtXlV
lnxbmnbo
获取的加密串:OCEurVbQNnBs0YOOtfKmuEX9y1qVsssRHCvKBu4roVB84p8rs0VAzJKAeb4opQ6U6D0uLAncLCjY1esHXm35/ep2ypbaErg3Piz5jTkBSAgyRCymz1cA1ie0uy/YP5Veli+ttxNDnRU8moQ+m2K2aU9L7Pv3jWrQW3DM0EWmX3A=
解密之后的数据:加密的内容
更多推荐
已为社区贡献3条内容
所有评论(0)