前端使用國密sm2和sm4進行加解密代碼示例
更新時間:2025年04月09日 09:46:17 作者:喜歡代碼的新之助
在前端實現(xiàn)加密算法時,需要特別注意密鑰的安全存儲和管理,不應將敏感的密鑰硬編碼在前端代碼中,這篇文章主要介紹了前端使用國密sm2和sm4進行加解密的相關資料,需要的朋友可以參考下
國密SM加密
- 國密SM:國密算法,即國家商用密碼算法。是由國家密碼管理局認定和公布的密碼算法標準及其應用規(guī)范,其中部分密碼算法已經(jīng)成為國際標準。如SM系列密碼,SM代表商密,即商業(yè)密碼,是指用于商業(yè)的、不涉及國家秘密的密碼技術。
安裝SM加密依賴
npm install --save sm-crypto 或 npm install --save sm-crypto --legacy-peer-deps
SM2
封裝
- 將sm2的加密解密方法進行封裝,文件命名為sm2.js
// 引入 const sm2 = require('sm-crypto').sm2 const cipherMode = 0 // 1 - C1C3C2,0 - C1C2C3,默認為1 // 后端會生成密鑰對 // publicKey:公鑰 后端提供 // privateKey:私鑰 后端提供 const publicKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" const privateKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" // 加密 // value:需要加密的內(nèi)容 export function encrypt (value) { // 給后端傳值時需要在加密的密文前面加04 ,這樣后端才能解密正確不報錯 return '04' + sm2.doEncrypt(value, publicKey, cipherMode) } // 解密 // value:需要解密的密文 export function decrypt (value) { // 后端傳輸過來的密文開頭的兩個字符通常也為04,因此解密時需要刪除 return sm2.doDecrypt(value.slice(2, value.length), privateKey, cipherMode) }
使用
// 引入sm2.js,注意文件路徑不要出錯
import { encrypt, decrypt } from './sm2'
// data:需要加密的數(shù)據(jù)
// encryptData:加密后的密文
// 若有需要則將js對象轉(zhuǎn)換為字符串后進行加密:JSON.stringify(data)
const encryptData = encrypt(JSON.stringify(data))
// data:需要解密的密文
// decryptData:解密后的數(shù)據(jù)
// 若解密結果為json字符串,則可以通過JSON.parse()方法將解密結果轉(zhuǎn)化為json對象
const decryptData = decrypt(data)
SM4
封裝
將sm4的加密解密方法進行封裝,文件命名為sm4.js
const SM4 = require("sm-crypto").sm4; const pwdKey = "xxxx"; //密鑰 前后端一致,后端提供 let sm4Config = { key: pwdKey, mode: "ecb", // 加密的方式有兩種,ecb和cbc兩種,看后端如何定義的,cbc需要iv參數(shù),ecb不用 iv: '1234567891011121', // 初始向量,cbc模式的第二個參數(shù),也需要跟后端配置的一致 cipherType: "base64" }; const sm4Util = new SM4(sm4Config); // new一個sm4函數(shù),將上面的sm4Config作為參數(shù)傳遞進去。 /* * 加密工具函數(shù) * @param {String} text 待加密文本 */ export function encrypt(text) { return sm4Util.encrypt(text, pwdKey); } /* * 解密工具函數(shù) * @param {String} text 待解密密文 */ export function decrypt(text) { return sm4Util.decrypt(text, pwdKey); }
使用
// 引入asm4.js,注意文件路徑不要出錯
import { encrypt,decrypt } from "./sm4"
// data:需要加密的數(shù)據(jù)
// encryptData:加密后的密文
// 若有需要則將js對象轉(zhuǎn)換為字符串后進行加密:JSON.stringify(data)
const encryptData = encrypt(JSON.stringify(data))
// data:需要解密的密文
// decryptData:解密后的數(shù)據(jù)
// 若解密結果為json字符串,則可以通過JSON.parse()方法將解密結果轉(zhuǎn)化為json對象
const decryptData = decrypt(data)總結
到此這篇關于前端使用國密sm2和sm4進行加解密的文章就介紹到這了,更多相關前端國密sm2和sm4加解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript獲取數(shù)組最后一個元素的3種方法以及性能
在開發(fā)過程中,我們常常需要得到js數(shù)組的最后一個數(shù)組元素,下面這篇文章主要給大家介紹了關于JavaScript獲取數(shù)組最后一個元素的3種方法以及性能,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-06-06

