1.对称加密
推荐使用crypto这个没什么好说的网上资料很多。
2.非对称加密
RSA加密网上大多使用的是jsencrypt但在这里需要说的是不推荐!不推荐!不推荐。
主要原因如下:
1.长字符串解密报错或者直接返回null解析不了。需要单独引入encryptLong拓展进行分段解密。
2.拓展包的分段解密部分文字出现乱码,导致json串无法转换为json对象。
所以不推荐jsencrypt进行RSA进行加解密。
本文主要讲使用通过node-rsa进行RSA加解密,也是找半天资料找到的方法,度娘不知道怎么了没用的一大堆简直是没法用.
1.引入node-rsa
npm install node-rsa
2.用就简单了直接上代码块:
如果有不明白的可以直接看官方文档:https://www.npmjs.com/package/node-rsa
//引入node-rsa
const NodeRSA = require('node-rsa');
export default {
/**
* RES 参数加密
* @param data 需加密参数
* @param rsaKey rsa公钥或私钥
* @param keyType 加解密类型公钥加解密或私钥加解密(pkcs8-public-pem或pkcs8-private-pem),
* @param type 操作类型加密或解密,
* @constructor
*/
ResUtil(data, rsaKey, keyType, type) {
let vm = this;
if (!data) {
return data;
}
if (rsaKey) {
if (!type) {
throw '请输入加密类型,公钥加密或私钥加密';
}
//创建NodeRSAd对象 输入公钥或私钥和类型
const nr = new NodeRSA(rsaKey, keyType);
//加解密类型 pkcs8规范
nr.setOptions({encryptionScheme: 'pkcs1'});
if (type == constant.common.ENCRYPT) {
return (data instanceof Object || data instanceof Array) ? nr.encrypt(JSON.stringify(data), 'base64', 'utf8') : nr.encrypt(new String(data), 'base64', 'utf8');
} else {
return nr.decrypt(data, 'utf8');
}
} else {
throw '请输入参数加密公钥或私钥';
}
},
后端直接使用的HuTool的RSA工具类:
因为在做参数加解密后台用的Springboot 做参数加解密有用过滤器的(通过HttpServletRequestWrapper重写请求参数,但这获取不到请求的方法无法使用反射机制),有使用拦截器的还有使用AOP的但都不是很理想。
最终结果是使用Spring提供的方法解析器,进行参数解析后期应该会写一篇文档单独写一下,这里就不多说了。
Hutool官方文档:https://www.hutool.cn/docs/#/crypto/%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86-AsymmetricCrypto
//创建RSA解析对象 给上私钥和公钥 直接加解密就可以了
RSA rsa = new RSA(ConfigStatic.SYS_RSA_PRIVATE_KYE,ConfigStatic.SYS_RSA_PUBLIC_KYE);
String str2 = rsa.encryptBase64("{testkey:'test'}",KeyType.PublicKey);
System.out.println(str);