1.安装CryptoJS
npm install crypto-js
npm i @types/crypto-js --save-dev
2. AES加密
import CryptoJS from 'crypto-js';
const encrypt = (message: string, key) => {
const keyHex = CryptoJS.enc.Utf8.parse(key); // 秘钥
const option = { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }; // Pkcs7填充方式
const encrypted = CryptoJS.AES.encrypt(message, keyHex, option);
return encrypted.ciphertext.toString(); // 加密出来为 hex格式密文
};
3. AES解密
export const decrypt = (message: string, KEY) => {
let data = CryptoJS.enc.Hex.parse(message);
const key = CryptoJS.enc.Utf8.parse(KEY);
var option = {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
};
let srcs = CryptoJS.enc.Base64.stringify(data);
const words = CryptoJS.AES.decrypt(srcs, key, option);
const decryptedStr = words.toString(CryptoJS.enc.Utf8).toString();
return decryptedStr;
};
4. 相关属性含义
value:加密/解密的字符串 key:密钥 iv:密钥偏移量 mode加密模式,使用 CryptoJS.mode.xxx,有如下参数:
CBC(Cipher Block Chaining) (the default)加密块链模式 CFB(Cipher
Feedbackblock)加密反馈模式 CTR/CTRGladman(Counter block) OFB(Output
Feedbackblock)输出反馈模式 ECB(Electronic Codebook block)电子密码本模式
padding填充方式,使用方CryptoJS.pad.xxx,有如下参数: Pkcs7 (the default) AnsiX923
Iso10126 Iso97971 ZeroPadding NoPadding
encoding编码格式,从编码格式转换为WordArray对象,反之亦然。
使用CryptoJS.enc.xxx.parse、CryptoJS.enc.xxx.stringify, 有如下参数: Hex Latin1
Utf8 Utf16 Base64