AES和国密SM4加解密封装及其如何使用
CryptoJs /ˈkrɪptəʊ/ CryptoJS是一个JavaScript的加解密的工具包。它支持多种的算法:MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密。
**
第一种: AES加密解密 (ECB模式和CBC模式 )
**
utils下新建crypto.js
npm install crypto-js --save-dev
import CryptoJS from "crypto-js";
export default {
/**
* @param {*需要加密的字符串 注:对象转化为json字符串再加密} word
* @param {*aes加密需要的key值,这个key值后端同学会告诉你} keyStr
*/
encrypt(word, keyStr) {
// 加密
var key = CryptoJS.enc.Utf8.parse(keyStr);
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
}); // 加密模式为ECB,补码方式为PKCS5Padding(也就是PKCS7)
return encrypted.toString();
},
decrypt(word, keyStr) {
// 解密
var key = CryptoJS.enc.Utf8.parse(keyStr);
var decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
},
};
使用:
main.js中
import crypto from "./utils/crypto";
Vue.prototype.$crypto = crypto;
npm install js-base64 --save
import Base64 from "base-64";
import { encryptKey } from "@/config/index";
//encryptKey是加密的秘钥,我是放在 config/index中的,这里引入
console.log('value',value);
let myVal = Base64.encode(this.$crypto.encrypt(value, encryptKey))
console.log('加密', myVal);
console.log('解密',this.$crypto.decrypt(Base64.decode(myVal), encryptKey));
**
第二种:国密SM4进行加密、解密
**
utils下新建crypto.js
npm install crypto-js --save-dev
import { encryptKey } from '@/config/index'
const SM4 = require('gm-crypt').sm4
const sm4Config = {
key: encryptKey,
mode: 'ecb',
cipherType: 'base64',
}
let sm4 = new SM4(sm4Config)
export default {
/**
* 加密工具函数
* @param {String} text 待加密文本
*/
encrypt(text) {
return sm4.encrypt(text, encryptKey)
},
/**
* 解密工具函数
* @param {String} text 待解密密文
*/
decrypt(text) {
return sm4.decrypt(text, encryptKey)
},
}
使用:
main.js中:
import crypto from "./utils/crypto";
Vue.prototype.$crypto = crypto;
// 加密userName
// npm install js-base64 --save
import Base64 from "base-64";
let userName = Base64.encode(this.$crypto.encrypt(userName)),
//解密: let copUserName = this.$crypto.decrypt(Base64.decode(userName))