前端js使用jsrsasign,生成RSA秘钥,获取一系列信息(公钥,私钥,模数,指数等)进行加密解密

前言:
之前的项目里用的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进制,不需要在去转

猜你喜欢

转载自blog.csdn.net/weixin_44655037/article/details/126746637