基于jsrsasign的签名函数
import jsrsasign, { KEYUTIL, KJUR, RSAKey } from 'jsrsasign';
import { appSecret } from '../config';
export default function sha1withRsa(obj) {
var newArr = [];
var newObj = {};
var str = '';
for (const key in obj) {
newArr.push(key);
}
newArr = newArr.sort()
for (let i = 0; i < newArr.length; i++) {
newObj[newArr[i]] = obj[newArr[i]];
str += `${newArr[i]}=${newObj[newArr[i]]}`;
if (i == newArr.length - 1) {
continue;
}
str += '&';
}
let rsa = new RSAKey();
rsa = KEYUTIL.getKey(appSecret);
// 创建Signature对象,设置签名编码算法
let sig = new KJUR.crypto.Signature({ "alg": "SHA256withRSA" });
// 初始化
sig.init(rsa)
// 传入待加密字符串
sig.updateString(str)
// 生成密文
let sign = jsrsasign.hextob64(sig.sign());
// 对加密后内容进行URI编码
sign = encodeURIComponent(sign);
//把参数与密文拼接好
// let params = newStr + '&sign=' + sign;
return sign
}
注意:传入pem标准格式的秘钥字符串, 解析生成秘钥实例: RSAKey. 标准的pem格式秘钥含有开始标记和结束标记。-----BEGIN xxx-----
, -----END xxx-----
网友评论