登录页功能完成
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
|
||||
import CryptoJS from 'crypto-js'// 引入AES加密库 npm install crypto-js@3.1.9-1 -save
|
||||
// import { JSEncrypt } from 'jsencrypt'; // npm install jsencrypt -save
|
||||
|
||||
const RsaPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZf8e1tzYTSr7KciAHH2KrE3O13ftuv3rHRRz7MztYXirMdLquocTNSJ5BAoj1H3V8fvFtfmN6BkuB6XnQrbY5heOzZZQWvO4qAa0EktwkLQUwCkYJfaQNc1Iw4wZFt4VO7U8+LLo+IO7jtxmaNIBqJm8laDc1C6zw2ETZD4bQ6wIDAQAB"
|
||||
const iv = CryptoJS.enc.Utf8.parse('1234567812345678');
|
||||
//定义rsa加密类
|
||||
// const crypt = new JSEncrypt();
|
||||
// crypt.setPublicKey(RsaPublicKey); // 设置公钥
|
||||
|
||||
|
||||
// 生成一个随机的128位(16字节)AES密钥
|
||||
const generateAESKey = () => {
|
||||
return CryptoJS.lib.WordArray.random(16);
|
||||
}
|
||||
// 转化生成AES密钥成base64字符串
|
||||
const getGenerateAESKeyBase64 = (aesKey) => aesKey.toString(CryptoJS.enc.Base64)
|
||||
|
||||
// 执行rsa加密
|
||||
const encryptRSA = (str) => crypt.encrypt(str)
|
||||
// 执行rsa解密
|
||||
const decryptRSA = (str) => crypt.decrypt(str)
|
||||
|
||||
// 执行aes加密
|
||||
export const encryptAES = (data, aesKeyBase64, iv) => {
|
||||
const key = CryptoJS.enc.Utf8.parse(aesKeyBase64);
|
||||
return CryptoJS.AES.encrypt(JSON.stringify(data), key, {
|
||||
iv: iv,
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
}).toString();
|
||||
}
|
||||
// aes解密
|
||||
const decryptAES = (ciphertext, aesKeyBase64, iv) => {
|
||||
const key = CryptoJS.enc.Utf8.parse(aesKeyBase64);
|
||||
const bytes = CryptoJS.AES.decrypt(ciphertext, key, {
|
||||
iv: iv,
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
});
|
||||
return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
|
||||
}
|
||||
|
||||
// 加密过程
|
||||
export const encryptData = (data={}) => {
|
||||
const aesKey = generateAESKey(); // 获取随机密钥key
|
||||
const aesKeyBase64 = getGenerateAESKeyBase64(aesKey) // 变成base64
|
||||
const key = encryptRSA(aesKeyBase64)
|
||||
const ciphertext = encryptAES(data, aesKeyBase64, iv);
|
||||
const decryptedData = decryptAES(ciphertext, aesKeyBase64, iv);
|
||||
return {text:ciphertext, key:key, aesKeyBase64:aesKeyBase64}
|
||||
}
|
||||
|
||||
// 解密过程
|
||||
export const decryptData= (aesStr, aesKey) => {
|
||||
return decryptAES(aesStr, aesKey, iv)
|
||||
}
|
||||
|
||||
/**
|
||||
* AES加密
|
||||
* @param plainText 明文
|
||||
* @param keyInBase64Str base64编码后的key
|
||||
* @returns {string} base64编码后的密文
|
||||
*/
|
||||
export function encryptByAES(plainText, keyInBase64Str) {
|
||||
let key = CryptoJS.enc.Base64.parse(keyInBase64Str);
|
||||
let encrypted = CryptoJS.AES.encrypt(plainText, key, {
|
||||
mode: CryptoJS.mode.ECB,
|
||||
padding: CryptoJS.pad.Pkcs7,
|
||||
});
|
||||
// 这里的encrypted不是字符串,而是一个CipherParams对象
|
||||
return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
|
||||
}
|
||||
|
||||
/**
|
||||
* AES解密
|
||||
* @param cipherText 密文
|
||||
* @param keyInBase64Str base64编码后的key
|
||||
* @return 明文
|
||||
*/
|
||||
export function decryptByAES(cipherText, keyInBase64Str) {
|
||||
let key = CryptoJS.enc.Base64.parse(keyInBase64Str);
|
||||
// 返回的是一个Word Array Object,其实就是Java里的字节数组
|
||||
let decrypted = CryptoJS.AES.decrypt(cipherText, key, {
|
||||
mode: CryptoJS.mode.ECB,
|
||||
padding: CryptoJS.pad.Pkcs7,
|
||||
});
|
||||
|
||||
return decrypted.toString(CryptoJS.enc.Utf8);
|
||||
}
|
||||
Reference in New Issue
Block a user