应项目需求,将请求数据进行签名,后端接口进行验签。后端接口提供签名私钥,使用SHA256withRSA进行签名。对于js进行RSA签名,这个内容其实很早就有相关库了,大部分应该使用的都是jsrsasign。
1. 下载jsrsasign库,npm install jsrsasign走起,在项目根目录下node_modules此时应该存在jsrsasign目录了,我们所需要的资源都已经在里面了;
2. 看了下里面的资源,就lib文件夹下的jsrsasign.js是主要文件,于是便拷贝了该文件出来,再次对其包装下;
3. 签名主要用到KJUR,hextob64
const { KJUR,hextob64 } = require('@/common/jsrsasign/lib/jsrsasign');
4. 私钥,因为后端接口调用的时候不需要传入pem的begin和end部分,所以为了统一,给到的也是不带begin和end部分的字符串,由前端进行处理:
const strPrivateKey="xxxxxx"; const privateKey=`-----BEGIN PRIVATE KEY----- ${strPrivateKey} -----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; }
6. 整个代码如下
const { KJUR,hextob64 } = require('@/common/jsrsasign/lib/jsrsasign'); const rsaSign = (content, privateKey) => { // 创建 Signature 对象 privateKey=`-----BEGIN PRIVATE KEY----- ${privateKey} -----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"),结束。
如有不对的地方,请各位大佬指出,不胜感激