Java的小小世界|RSA之基于hutool的快速实现
刚刚临时帮同事写个rsa加密的工具包,基于hutool的快速实现,随手给需要的小朋友,RSA工具包
非依赖hutool的请看我另外的文章,RSA加密算法Java应用解析-目前地球上最有影响力的加密算法
2020年08月02日21:06:42 关于RSA就不多说了,直接上干货一、首先获取公私钥
// 第一次使用时获取,获取后保存公私钥,不要重复获取Map, 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> 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> map = new HashMap, String>(2);
map.put(PUBLIC_KEY,pubEncBase64);
map.put(PRIVATE_KEY,priEncBase64);
return map;
} catch (Exception e){
e.printStackTrace();
}
return null;
}}
关注Github:1/2极客
关注博客:御前提笔小书童
关注网站:HuMingfeng
【Java的小小世界|RSA之基于hutool的快速实现】关注公众号:开发者的花花世界
文章图片
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量