点击上方"开发者的花花世界",选择"设为星标"技术干货不定时送达!
刚刚临时帮同事写个rsa加密的工具包,基于hutool的快速实现,随手给需要的小朋友, 非依赖hutool的请看我另外的文章,RSA加密算法Java应用解析-目前地球上最有影响力的加密算法[1]
RSA工具包
2020年08月02日21:06:42 关于RSA就不多说了,直接上干货
一、首先获取公私钥
// 第一次使用时获取,获取后保存公私钥,不要重复获取Map<String, String> stringStringMap = RsaUtils.generateKeyPair();String RSAPublicKey = stringStringMap.get(PUBLIC_KEY);String RSAPrivateKey = stringStringMap.get(PRIVATE_KEY);
二、公钥加密
//直接调用encrypt方法String content = "拳打南山敬老院,脚踢北海幼儿园";String encrypt = RsaUtils.encrypt(content, RSAPublicKey);
三、私钥解密
String decrypt = RsaUtils.decrypt(encrypt, RSAPrivateKey);
附代码
import cn.hutool.crypto.SecureUtil;import cn.hutool.crypto.asymmetric.KeyType;import cn.hutool.crypto.asymmetric.RSA;import sun.misc.BASE64Encoder;import java.security.KeyPair;import java.security.PrivateKey;import java.security.PublicKey;import java.util.HashMap;import java.util.Map;public class RsaUtils {/*** 类型*/public static final String ENCRYPT_TYPE = "RSA";/*** 获取公钥的key*/private static final String PUBLIC_KEY = "RSAPublicKey";/*** 获取私钥的key*/private static final String PRIVATE_KEY = "RSAPrivateKey";/*** 公钥加密* @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;}/*** 获取公私钥-请获取一次后保存公私钥使用* @return*/public static Map<String,String> generateKeyPair() {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);Map<String, String> map = new HashMap<String, String>(2);map.put(PUBLIC_KEY,pubEncBase64);map.put(PRIVATE_KEY,priEncBase64);return map;} catch (Exception e){e.printStackTrace();}return null;}}
关注Github:1/2极客[2]
关注博客:御前提笔小书童[3]
关注网站:HuMingfeng[4]
关注公众号:开发者的花花世界
References
[1]
RSA加密算法Java应用解析-目前地球上最有影响力的加密算法: https://blog.csdn.net/qq_22260641/article/details/70885798[2]
1/2极客: https://github.com/humingfeng[3]
御前提笔小书童: https://blog.csdn.net/qq_22260641[4]
HuMingfeng: https://royalscholar.cn
喜欢就点个"在看"呗^_^
文章转载自开发者的花花世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





