基于jsrsasign的vue框架rsa前端加密实现
2018-04-12 本文已影响0人
神秘的盒子
一个菜鸟做给自己看的学习记录
前端rsa加密库API:点击跳转→jsrsasign.js
官网:点击跳转→官网链接
原文:点击跳转→原文链接
//安装
npm install jsrsasign
//引入
import jsrsasign from 'jsrsasign'
//公共方法挂载
Vue.prototype.$getCode = function(){
//此处操作与后端约定参数
// 创建RSAKey对象
var rsa = new jsrsasign.RSAKey();
//因为后端提供的是pck#8的密钥对,所以这里使用 KEYUTIL.getKey来解析密钥
var k = `-----BEGIN PRIVATE KEY-----
ASDFdadfasdfFADFasdfasdgasdfasdgaasdf97asdfa7gasd9f7a7g7a(假秘钥)
-----END PRIVATE KEY-----`
// 将密钥转码
rsa = jsrsasign.KEYUTIL.getKey(k);
// 创建Signature对象,设置签名编码算法
var sig = new jsrsasign.KJUR.crypto.Signature({"alg": "SHA256withRSA"});
// 初始化
sig.init(rsa)
// 传入待加密字符串
sig.updateString(newStr)
// 生成密文
var sign = jsrsasign.hextob64(sig.sign());
// 对加密后内容进行URI编码
sign = encodeURIComponent(sign);
//把参数与密文拼接好,返回
var params = newStr+'&sign='+sign;
return params
}
注意点:
- 密钥对需要带有‘—–BEGIN PRIVATE KEY—–’以及相应的尾标识
- 密钥对格式为PCK#8时使用KEYUTIL.getKey(yourPEMKey)进行解析,而PCK#1则使用rsa.readPrivateKeyFromPEMString
- sig.sign()生成的是一串16进制字符串(hexadecimal),通过需要转换为base64位使用,通过jsrsasign的全局方法hextob64()进行转换。文档见jsrsasign的global相关方法
- 最后根据情况 需要使用encodeURICompoent(sign)将加密后的密文进行转码,因为一些+号传到后端可能不识别。
相关知识: