應項目需求,將請求數據進行簽名,后端接口進行驗簽。后端接口提供簽名私鑰,使用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-----\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; }
6. 整個代碼如下
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"),結束。
如有不對的地方,請各位大佬指出,不勝感激
