在 util.js引入 import CryptoJS from 'crypto-js'
- message: 需要加解密的文本
- key: 加解密的秘钥
- iv: 偏移量,最短8位数,ecb模式不需要此参数
CBC加密 Pkcs7填充方式
const encryptByDES = function (message, key, iv) {
const keyHex = CryptoJS.enc.Utf8.parse(key) // 秘钥
const iv = CryptoJS.enc.Utf8.parse(iv) // 偏移量
const encrypted = CryptoJS.DES.encrypt(message, keyHex, {
iv: iv,
mode: CryptoJS.mode.CBC, // 加密模式
padding: CryptoJS.pad.Pkcs7
})
return encrypted.ciphertext.toString() // 加密出来为 hex格式密文
}
解密环节
// DES解密
const decryptByDES = function (ciphertext, key, iv) {
const keyHex = CryptoJS.enc.Utf8.parse(key)
const iv = CryptoJS.enc.Utf8.parse(iv)
const decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Hex.parse(ciphertext)
}, keyHex, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
return decrypted.toString(CryptoJS.enc.Utf8)
}
┈━═┈━═┈━═┈━═┈━═☆ 分 ┈━═┈━═┈━═┈━═┈━═☆ 割 ┈━═┈━═┈━═┈━═┈━═☆ 线
今天碰到一个坑,关于支付密码,需要返回base64格式的密文 在博客园看到一个样例,成功填坑!
3DES加密,加密格式 ECB,返回base64格式
function pswdEncryptByDES(string, key) {
const KeyHex = CryptoJS.enc.Utf8.parse(key);
const encrypted = CryptoJS.TripleDES.encrypt(string,
KeyHex, {
mode: CryptoJS.mode.ECB, // ecb模式不需要偏移量
padding: CryptoJS.pad.Pkcs7
});
let hexstr = encrypted.toString(); // 此方式返回base64格式
// encrypted.ciphertext.toString() 如果是这么写 那就返回hex格式的密文了
return hexstr;
}
解密环节
function Decrypt3Des(base64str, aStrKey, ivstr) {
const KeyHex = CryptoJS.enc.Utf8.parse(aStrKey); // 将key转换成 wordArray
// 因为是base64的密文,所以不用转16进制hex
const decrypted = CryptoJS.TripleDES.decrypt(base64str, KeyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
iv: CryptoJS.enc.Utf8.parse(ivstr)
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
┈━═┈━═┈━═┈━═┈━═☆ 分 ┈━═┈━═┈━═┈━═┈━═☆ 割 ┈━═┈━═┈━═┈━═┈━═☆ 线
3DES加密,加密格式 ECB,返回HEX格式
function pswdEncryptByDES(string, key) {
const KeyHex = CryptoJS.enc.Utf8.parse(key);
const encrypted = CryptoJS.TripleDES.encrypt(string,
KeyHex, {
mode: CryptoJS.mode.ECB, // ecb模式不需要偏移量
padding: CryptoJS.pad.Pkcs7
});
// let hexstr = encrypted.toString(); // 此方式返回base64
encrypted.ciphertext.toString() // 返回hex格式的密文
return hexstr;
}
解密环节
function Decrypt3Des(hexStr, aStrKey, ivstr) {
const KeyHex = CryptoJS.enc.Utf8.parse(aStrKey);
//第一步把16进制字符串转为WordArray格式
const WordArray = CryptoJS.enc.Hex.parse(hexStr);
//第二步把WordArray再转为base64的字符串
const base64str = CryptoJS.enc.Base64.stringify(WordArray);
//第三步再进行解密
const decrypted = CryptoJS.TripleDES.decrypt(base64str, KeyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
iv: CryptoJS.enc.Utf8.parse(ivstr)
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
网友评论