/* 声明一个数据加密模块 */
define(['lib/crypto-js'], function (CryptoJS) {
return{
//Hashing算法
encryptWithHashing: function(message, type) {
switch (type) {
case "SHA256":
return CryptoJS.SHA256(message).toString(CryptoJS.enc.Base64);
case "MD5":
return CryptoJS.MD5(message).toString(CryptoJS.enc.Base64);
default:
return null;
}
},
/* AES对称加密算法的加解密 */
//AES加密
encryptWithAES: function(message, key, vi) {
let encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(message), CryptoJS.enc.Utf8.parse(key), { //key必须要为16位十六进制进制
iv: CryptoJS.enc.Utf8.parse(vi), // 初始向量
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext); //将密文转换为Base64编码字符串
},
//AES解密
decryptWithAES: function(encrypted_Base64, key, vi) {
let encrypted = CryptoJS.enc.Base64.parse(encrypted_Base64); //Base64字符串解码
let src = CryptoJS.enc.Base64.stringify(encrypted);
let decrypted = CryptoJS.AES.decrypt(src, CryptoJS.enc.Utf8.parse(key), {
iv: CryptoJS.enc.Utf8.parse(vi), // 初始向量
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
}
});
注:需要自己下载crypto-js.js文件
调用演示:
require.config({
baseUrl: 'js',
paths: {
encrypt: 'utils/encrypt'
}
});
require(['encrypt'], function (encrypt) {
//MD5散列算法
let md5 = encrypt.encryptWithHashing("md5", "MD5");
let key;//后端获取AES密钥
let vi;//后端获取AES的初始向量
//AES加密
let aesEncrypted = encrypt.encryptWithAES("aes", key, vi);
//AES解密
let aes = encrypt.decryptWithAES(aesEncrypted, key, vi);
});