前端rsa加密参数的实现(加密库:jsrsasign)

目前写的项目,要求使用rsa算法进行加密传输验证。要求前端通过私钥现将参数进行加密后再拼接到URL后进行提交,后端拿到进行验证。

一、前期准备:
前端rsa加密的库:jsrsasign下载地址

后端提供的密钥对(类似如下结构,以PKCS#8为例)

-----BEGIN PRIVATE KEY-----
MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEA6GZN0rQFKRIVaPOz
... (省略。。。) ...
LaLGdd9G63kLg85eldSy55uIAXsvqQIgfSYaliVtSbAgyx1Yfs3hJ+CTpNKzTNv/
Fx80EltYV6k=
-----END PRIVATE KEY-----

待加密的字符串:如(‘aaa’)
1.1先补充点rsa加密知识
rsa算法——非对称密钥

公钥私钥成对,用其中一个加密只能用另一个解密,常用公钥加密私钥解密。

JAVAEE项目中很多时候都需要对核心数据进行加密传输,采用非对称加密算法在前端对数据进行加密,在服务端进行解密是一个不错的方式。而常用的实现是采用RSA非对称加密方法。

具体步骤为:
1.在服务端用密码种子生成密钥对,保存密码种子(一个特定的密码种子,生成特定的密钥对,密钥种子确定,密钥对确定)或者直接保存私钥
2.把公钥传到页面
3.页面用js根据公钥把需要加密的数据进行加密,把加密后的数据传回服务端
4.服务端取出保存的密码种子或者直接保存的私钥,采用私钥对加密字符串进行解密,得到明文

二、正题

此次主要解决的问题是 前端通过使用rsa算法库加密字符串并传递
  • jsrsasign是目前找到的文档比较全的一个库,其GitHub地址,作者对一些issue提出的解决方案也是很有帮助的
// 1.页面引入:index.html
<script src="js/lib/jsrsasign-all-min.js"></script>
// 2. 使用密钥加密
var rsa = new RSAKey();  //创建rsa实例
//因为后端提供的是pck#8的密钥对,所以这里使用 KEYUTIL.getKey来解析密钥
// yourPEMKey替换为后端提供的密钥
rsa = KEYUTIL.getKey(yourPEMKey);  
// 设定签名以 SHA256 为基准,其他还有sha1等,详见文档          
var sig = new KJUR.crypto.Signature({"alg": "SHA256withRSA"});
// 初始化
sig.init(rsa)
// 传入带加密字符串
sig.updateString(paramStr)
// 生成密文
var sign = hextob64(sig.sign());
// 对加密后内容进行URI编码
sign=encodeURIComponent(sign)
// 最后拼接参数,提交(类似:http://xxx.xxx.com?a=1&b=2&sign=asqaswf)
var url = api+paramStr+'&sign='+sign;       
// ajax提交
this.$http.post(url).then(callback)

注意:

注意: 
1. 密钥对需要带有‘—–BEGIN PRIVATE KEY—–’以及相应的尾标识 
2. 密钥对格式为PCK#8时使用KEYUTIL.getKey(yourPEMKey)进行解析,而PCK#1则使用rsa.readPrivateKeyFromPEMString
3. sig.sign()生成的是一串16进制字符串(hexadecimal),通过需要转换为base64位使用,通过jsrsasign的全局方法hextob64()进行转换。文档见[jsrsasign的global相关方法](https://kjur.github.io/jsrsasign/api/symbols/global__.html) 
4. 最后根据情况 需要使用encodeURICompoent(sign)将加密后的密文进行转码,因为一些+号传到后端可能不识别。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值