uniapp使用RSA签名
本人用于微信小程序唤起收银台支付签名加密
应项目需求,将请求数据进行签名,后端接口进行验签。后端接口提供签名私钥,使用SHA256withRSA进行签名。对于js进行RSA签名,这个内容其实很早就有相关库了,大部分应该使用的都是jsrsasign。
-
下载jsrsasign库,npm install jsrsasign走起,在项目根目录下node_modules此时应该存在jsrsasign目录了,我们所需要的资源都已经在里面了;
-
看了下里面的资源,就lib文件夹下的jsrsasign.js是主要文件,于是便拷贝了该文件出来,再次对其包装下;
-
签名主要用到KJUR,hextob64
const { KJUR ,hextob64 } = require('@/common/jsrsasign/lib/jsrsasign');
- 私钥,因为后端接口调用的时候不需要传入pem的begin和end部分,所以为了统一,给到的也是不带begin和end部分的字符串,由前端进行处理:
const strPrivateKey="xxxxxx";const privateKey=-----BEGIN PRIVATE KEY-----\n${strPrivateKey}\n-----END PRIVATE KEY-----;
5.签名处理
const rsaSign = (content, privateKey) => {
// 创建 Signature 对象
const signature = new KJUR.crypto.Signature({
alg: "SHA256withRSA",
//私钥pem!
prvkeypem: privateKey
});
signature.updateString(content);
const signData = signature.sign();
// 将内容转成base64
return hextob64(signData)
// return signData;
}
- 整个代码如下
const {
KJUR,hextob64
} = require('@/common/jsrsasign/lib/jsrsasign');
const rsaSign = (content, privateKey) => {
// 创建 Signature 对象
privateKey=`-----BEGIN PRIVATE KEY-----\n${privateKey}\n-----END PRIVATE KEY-----`;
const signature = new KJUR.crypto.Signature({
alg: "SHA256withRSA",
prvkeypem: privateKey
})
signature.updateString(content)
const signData = signature.sign()
// 将内容转成base64
return hextob64(signData)
// return signData;
}
module.exports = {
rsaSign
}
7.请求rsaSign,组装成url键值对字符串,rsaSign("xxxx","xxxx"),结束。