前言:
之前的项目里用的RSA加解密的时候是生成固定的公钥(模数,指数)和私钥放在代码里进行数据的解密。现在要修改成前端自己生成(模数和指数)传给后台。后台加密数据返回给我。我在用私钥解密。
后面查了很多,开始的window.crypto里的方法可以生成公钥和私钥,但是这个只能在浏览器中使用,没办法在小程序中使用。所以放弃了。
然后就是这个jsrsasign这个方法比较全面。所以选择使用这个了。
rsa的简单的知识介绍
建议可以先看一下这个文章
阮老师说RSA的文章
简单的来说生成秘钥的过程中,生成到的几个数
q ,p,n,d,e;
q,p是随机选择两个不相等的质数
n 是 计算n的欧拉函数φ(n)的得到的数,也被我们称为模数
e 被我们称为指数
公钥 获取 通过 n和e
私钥 获取 通过 n和d
基础知识就简单提一下。我们直接到说使用
使用
下载
npm install jsrsasign -s
引入
import jsrsasign from 'jsrsasign'
获取公钥 和私钥
var rsaKeypair = jsrsasign.KEYUTIL.generateKeypair('RSA',1024);
let PUBLIC = jsrsasign.KEYUTIL.getPEM(rsaKeypair.prvKeyObj); //获取公钥
let PRIVATE = jsrsasign.KEYUTIL.getPEM(rsaKeypair.prvKeyObj,'PKCS8PRV'); //获取私钥
获取模数的base64数据
let Modulus = jsrsasign.hextob64nl(rsaKeypair.prvKeyObj.n.toString(16)); //进行模数转换base64 获得base64数据
//这里的模数是直接转base64数据传给后台的,如果需要hex的就得在次编码
获取指数
let info = jsrsasign.KEYUTIL.getJWK(rsaKeypair.prvKeyObj);
let Exponent = info.e; //获取指数
上面是根据我这边的需要的需求的格式进行获取的。
如果你的需要和这不一样的话,进行数据转换即可。
只要知道 n 是模数 e是指数
jsrsasign 还有其他的很多方法 和格式可以自行去查看
jsrsasign文档
加密
var prv = jsrsasign.KEYUTIL.getKey(PUBLIC ); //传入公钥
var iis = prv.encrypt('11111111'); //加密
解密
var prv = jsrsasign.KEYUTIL.getKey(PRIVATE); //传入私钥
var keyStr = prv.decrypt(jsrsasign.b64tohex(keyStrTemporary)); //我这边的需求是返回的base64 所以我又转成16进制。 本身就是16进制,不需要在去转