function encrypt(param) {
// method: 'AES', 'DES'
// mode: 'CBC', 'ECB'
const {key, text, method, mode} = param;
const keyHex = CryptoJS.enc.Utf8.parse(key);
if (!CryptoJS[method]) {
throw new Error(`method(${method}) not found.`)
}
if (mode === 'ECB') {
return CryptoJS[method].encrypt(text, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
}).toString();
} else if (mode === 'CBC') {
return CryptoJS[method].encrypt(text, keyHex, {
iv: keyHex,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
}).ciphertext.toString();
}
}
function decrypt(param) {
const {text, key, mode, method} = param;
const parseKey = CryptoJS.enc.Utf8.parse(key);
if (!CryptoJS[method]) {
throw new Error(`method(${method}) not found.`);
}
if (mode === 'CBC') {
//
return CryptoJS[method].decrypt(text, parseKey, {
iv: parseKey,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);
} else if(mode === 'ECB') {
//
return CryptoJS[method].decrypt({
ciphertext: CryptoJS.enc.Hex.parse(text)
}, parseKey, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);
}
}
// 测试
const res = encrypt({
text: '123456',
key: 'sdgjl',
method: 'DES',
mode: 'ECB'
});
crypto-js : 加密与解密
最新推荐文章于 2024-09-03 12:15:00 发布