let publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeCDcnFrS7DIRbvZLHreVUzaMbAFy2DYmioxBK606urY4rVR8IgLgUhnyw2/GQ99pyr8lGtqPeOoapantw1XwEVyi74MDxs4UDL8j4OZR1Es7HVGOB0GwKWobdU9cm/1iDwGyouSmijxKyAePg6KsLNgbjDPYZRS11bYEuZ8/RLQIDAQAB';
// 设置公钥
encrypt.setPublicKey('-----BEGIN PUBLIC KEY-----' + publicKey + '-----END PUBLIC KEY-----')
const random = (length) => {
var str = Math.random().toString(36).substr(2);
if (str.length >= length) {
return str.substr(0, length);
}
str += random(length - str.length);
return str;
}
export const rsaEncode = (src) => {
// 加密数据
let data = encrypt.encrypt(src);
return data
};
export const getKey = () => {
// 生成私钥和偏移量
let key = { key: random(16), iv: random(16) };
// 对私钥和偏移量加密
let code = rsaEncode(key.key + ',' + key.iv);
window.codeArr = window.codeArr || {};
// 存入客户端
codeArr[code] = key;
return {
key, code
}
};
export const getAesKey = (aes) => {
console.log('aes: ', aes);
let key = JSON.parse(JSON.stringify(codeArr[aes]));
// 从客户端获取到 key
delete codeArr[aes];
return key
};
window.getKey = getKey
window.rsaEncode = rsaEncode
复制代码
// 创建 encrypt.js 文件import CryptoJS from 'crypto-js';
// ------------AES 加密-------------function getAesString(data, key, iv) {//加密 let keys = CryptoJS.enc.Utf8.parse(key) let vis = CryptoJS.enc.Utf8.parse(iv) let encrypt = CryptoJS.AES.encrypt(data, keys, { iv: vis, //iv偏移量 CBC需加偏移量 mode: CryptoJS.mode.CBC, //CBC模式 // mode: CryptoJS.mode.ECB, //ECB模式 padding: CryptoJS.pad.Pkcs7 //padding处理 }); // debugger return encrypt.toString(); //加密完成后,转换成字符串}// ------------AES 解密-------------function getDAesString(encrypted, key, iv) { // 解密 var key = CryptoJS.enc.Utf8.parse(key); var iv = CryptoJS.enc.Utf8.parse(iv); var decrypted =CryptoJS.AES.decrypt(encrypted,key,{ iv:iv, mode:CryptoJS.mode.CBC, padding:CryptoJS.pad.Pkcs7 }); return decrypted.toString(CryptoJS.enc.Utf8);}// AES 对称秘钥加密const aes = { en: (data, key) => getAesString(data, key.key, key.iv), de: (data, key) => getDAesString(data, key.key, key.iv)};export { aes };