当前位置: > > > SpringBoot - 实用工具类库common-util使用详解7(RSA加密解密:RSAUtil)

SpringBoot - 实用工具类库common-util使用详解7(RSA加密解密:RSAUtil)

七、RSA 加密解密工具类(RSAUtil)

1,基本介绍

(1)RSA 算法是一种非对称加密算法,要了解什么是对称加密算法,什么是非对称加密算法,可以参考我之前写的文章: 

(2)RSA 算法是第一个能同时用于加密和数字签名的算法。关于 RSA 更详细的介绍可以参考我之前写的文章:

(3)本文介绍的 RSAUtil 是对常用的 RSA 加解密的封装,该工具类除了提供生成 KeyPair 和常用加解密方法外,还提供了将 KeyPair 保存到秘钥文件以及从秘钥文件生成 KeyPair 的方法。
注意: 该工具产生的字符串秘钥都是经过 base64 编码的。

2,基本用法

(1)下面代码首先生成公钥和私钥,然后使用公钥来加密字符串,再用私钥解密已加密的字符串。
方法介绍:
  • createKeys(int keySize):该方法用于生成字符串类型的公钥和私钥然后分别存放到 map 中,生成的公钥和私钥都经过 base64 编码。参数 keySize 为 生成 key 的长度,长度越长越消耗性能。
  • encryptString(String plaintext, String publicKey):该方法使用公钥来加密字符串。
  • decryptString(String plaintext, String privateKey):该方法用来使用私钥解密已加密的字符串。
// 生成密钥
Map<String,String> keyMap = RSAUtil.createKeys(2048);
String privateKey = keyMap.get(RSAUtil.PRIVATE_KEY);
System.out.println("私钥:" + privateKey);
String publicKey = keyMap.get(RSAUtil.PUBLIC_KEY);
System.out.println("公钥:" + publicKey);

// 使用公钥来加密字符串
String encodedData = RSAUtil.encryptString("欢迎访问 hangge.com", publicKey);
System.out.println("密文:" + encodedData);

// 使用私钥解密已加密的字符串
String decodedData = RSAUtil.decryptString(encodedData, privateKey);
System.out.println("解密后文字: " + decodedData);

(2)运行结果如下:

3,将密钥存储到文件中

(1)下面代码首先生成一对密钥并保存到一个文件中,然后再从这个文件获取密钥对,最后使用公钥来加密字符串,再用私钥解密已加密的字符串。
方法介绍:
  • generateKeyPair(int keySize):该方法用于产生 RSA 的密钥对,一般在初始生秘钥的时候使用,该方法自动打印公钥的 modulusexponent
  • saveKeyPair(KeyPair kp, String filePath):该方法用于将密钥对存储到文件中。
  • getKeyPair(String filePath):该方法用于从文件中获取秘钥对。
// 生成密钥对,并存储到文件中
KeyPair kp = RSAUtil.generateKeyPair(1024);
RSAUtil.saveKeyPair(kp,"/Volumes/BOOTCAMP/RSAKey.txt");

// 从文件中获取秘钥对
KeyPair kp2 = RSAUtil.getKeyPair("/Volumes/BOOTCAMP/RSAKey.txt");
String privateKey = RSAUtil.getPrivateKey(kp2);
System.out.println("私钥:" + privateKey);
String publicKey = RSAUtil.getPublicKey(kp2);
System.out.println("公钥:" + publicKey);

// 使用公钥来加密字符串
String encodedData = RSAUtil.encryptString("欢迎访问 hangge.com", publicKey);
System.out.println("密文:" + encodedData);

// 使用私钥解密已加密的字符串
String decodedData = RSAUtil.decryptString(encodedData, privateKey);
System.out.println("解密后文字: " + decodedData);

(2)运行结果如下:

(3)同时会发现在指定位置会生成一个密钥文件:
评论0