加解密:sm4国密、AES加密封装方法记录总结
【代码】加解密:sm4国密、AES加密封装方法记录总结。
·
新建crypto.js文件,封装aes和国密sm4加密解密方法,导出加解密方法(入参均为需要加解密的数据)
相关依赖如下:
1.AES
npm i --save crypto-js
2.国密sm4
npm i --save sm-crypto
代码如下:
// 引入crypto-js的核心文件和AES模块
import CryptoJS from 'crypto-js';
//生成规则密钥(前后端约定好的规则生成的key,这里要自己补充)
export function generateKeyBasedOnToday() {
return key;
}
// 将字符串转换为字节数组
export function stringToBytes(str) {
return new TextEncoder().encode(str);
}
/**
* [AES 解密]
*/
export function decryptData(result) {
var content =decodeURIComponent(result) ;
var key = CryptoJS.enc.Utf8.parse(generateKeyBasedOnToday());
var bytes = CryptoJS.AES.decrypt(content.toString(), key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var decryptResult = bytes.toString(CryptoJS.enc.Utf8);
console.log('解密',decryptResult)
return decryptResult
}
/*
* [AES 加密]
*/
export function encryptData(data) {
// const secretKey = generateKeyBasedOnToday();
var keyUtf8 = CryptoJS.enc.Utf8.parse(generateKeyBasedOnToday()); //密钥,16位
const dataUtf8 = CryptoJS.enc.Utf8.parse(data);
// 使用AES进行加密,使用ECB模式和PKCS7填充
const encrypted = CryptoJS.AES.encrypt(dataUtf8, keyUtf8, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
// 对结果进行Base64编码
const base64Result = encrypted.toString();
// URL编码返回结果
const encodedResult = encodeURIComponent(base64Result);
console.log('decryptData(encodedResult)',decryptData(encodedResult));
return encodedResult;
}
// 引入sm-crypto的核心文件和sm4国密模块
import smCrypto from 'sm-crypto';
// [国密 加密]
const pwdKey = stringToBytes(generateKeyBasedOnToday()) //密钥替换为后端密钥
export function encryptData(text) {
const gmCryptConfigSet = {
mode: 'ecb',
output: 'string'
};
const ciphertext = smCrypto.sm4.encrypt(stringToBytes(text), pwdKey, gmCryptConfigSet)
console.log('加密数据',ciphertext);
return ciphertext
}
// [国密 解密]
export function decryptData(result,key) {
const gmCryptConfigSet = {
mode: 'ecb',
output: 'string'
};
const decryptedText = smCrypto.sm4.decrypt(result,stringToBytes(key), gmCryptConfigSet);
console.log('解密数据',decryptedText||'error');
return decryptedText
}
使用:
import { decryptData ,encryptData} from "@/utils/crypto.js"
// data:需加密的数据(加密时的密钥key已经在crypto.js文件中直接使用了,如果密钥生成有特殊要求则按照解密的方式自行修改)
encryptData(data)
// data:需解密的数据
// key:密钥
decryptData(data,key)
更多推荐


所有评论(0)