1. 簡單介紹下SM2 和 SM3
SM2 算法:是一種公鑰加密算法,它的密鑰長度為 256 位,安全性較高。可用于數(shù)字簽名、密鑰協(xié)商等場景。
SM3 算法:是一種對稱加密算法,用于消息摘要和數(shù)字簽名等場景。它的密鑰長度為 256 位,安全性較高。SM3 算法與 SM2
算法相互配合,提高了整體安全性能。
2. 接下來講前端如何實(shí)現(xiàn)
- 安裝
npm install sm-crypto
yarn add sm-crypto
- sm2 、sm3 引入寫法
require('sm-crypto').sm2
require('sm-crypto').sm3
- SM2 非對稱加密寫法
str是需要加密的字符串
cipherMode // 1 - C1C3C2,0 - C1C2C3,默認(rèn)為1
PUBLIC_KEY是后端給你的公鑰,長度為130位,記住是以04開頭
export function sm2Encrypt(str: string, cipherMode = 1) {
const sm2 = require('sm-crypto').sm2;
// 默認(rèn)生成公鑰 130 位太長,可以壓縮公鑰到 66 位
const compressedPublicKey = sm2.compressPublicKeyHex(PUBLIC_KEY);
// compressedPublicKey 和 PUBLIC_KEY 等價(jià)
const encryptData = sm2.doEncrypt(str, compressedPublicKey, cipherMode);
// 最后一步一定要記住再拼接04
return `04${encryptData}`;
}
代碼里面引入,加密密碼
sm2Encrypt(password,1)
- HMAC-SM3簽名算法寫法
data是簽名加密數(shù)據(jù),例如:賬號+密碼+時(shí)間戳(需要跟后端開發(fā)協(xié)商)
pwd是是第二個參數(shù),我們這里要求的是傳密碼,要求為 16
進(jìn)制串或字節(jié)數(shù)組,這里的strToHex方法就是將密碼轉(zhuǎn)為16進(jìn)制
export function sm3Sign(data: string, pwd: string) {
const sm3 = require('sm-crypto').sm3;
return sm3(data, { key: strToHex(pwd) });
}
將字符串轉(zhuǎn)為16進(jìn)制方法,我這里是自己封裝了一個,還有很多方法可以實(shí)現(xiàn)轉(zhuǎn)16進(jìn)制,大家可以自己百度學(xué)習(xí)文章來源:http://www.zghlxwxcb.cn/news/detail-804407.html
export function strToHex(str: string) {
var hexCharCode = [];
for (var i = 0; i < str.length; i++) {
hexCharCode.push(str.charCodeAt(i).toString(16));
}
// 記住這里的join一定是空,不要誤打了空格
return hexCharCode.join('');
}
代碼里面引入
sm3Sign(name+password+timestamp, password)
參考鏈接:sm2 sm3 sm4 加密實(shí)現(xiàn)
校驗(yàn)工具:在線加密解密工具文章來源地址http://www.zghlxwxcb.cn/news/detail-804407.html
到了這里,關(guān)于react+vue 前端國密算法sm2、sm3 、sm4的js ts實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!