You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.2 KiB
84 lines
2.2 KiB
import CryptoJS from 'crypto-js'; |
|
|
|
export default class crypto { |
|
// 使用AesUtil.genAesKey()生成,需和后端配置保持一致 |
|
static aesKey = 'O2BEeIv399qHQNhD6aGW8R8DEj4bqHXm'; |
|
|
|
// 使用DesUtil.genDesKey()生成,需和后端配置保持一致 |
|
static desKey = 'jMVCBsFGDQr1USHo'; |
|
|
|
/** |
|
* aes 加密方法 |
|
* @param data |
|
* @returns {*} |
|
*/ |
|
static encrypt(data) { |
|
return this.encryptAES(data, this.aesKey); |
|
} |
|
|
|
/** |
|
* aes 解密方法 |
|
* @param data |
|
* @returns {*} |
|
*/ |
|
static decrypt(data) { |
|
return this.decryptAES(data, this.aesKey); |
|
} |
|
|
|
/** |
|
* aes 加密方法,同java:AesUtil.encryptToBase64(text, aesKey); |
|
*/ |
|
static encryptAES(data, key) { |
|
const dataBytes = CryptoJS.enc.Utf8.parse(data); |
|
const keyBytes = CryptoJS.enc.Utf8.parse(key); |
|
const encrypted = CryptoJS.AES.encrypt(dataBytes, keyBytes, { |
|
iv: keyBytes, |
|
mode: CryptoJS.mode.CBC, |
|
padding: CryptoJS.pad.Pkcs7, |
|
}); |
|
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext); |
|
} |
|
|
|
/** |
|
* aes 解密方法,同java:AesUtil.decryptFormBase64ToString(encrypt, aesKey); |
|
*/ |
|
static decryptAES(data, key) { |
|
const keyBytes = CryptoJS.enc.Utf8.parse(key); |
|
const decrypted = CryptoJS.AES.decrypt(data, keyBytes, { |
|
iv: keyBytes, |
|
mode: CryptoJS.mode.CBC, |
|
padding: CryptoJS.pad.Pkcs7, |
|
}); |
|
return CryptoJS.enc.Utf8.stringify(decrypted); |
|
} |
|
|
|
/** |
|
* des 加密方法,同java:DesUtil.encryptToBase64(text, desKey) |
|
*/ |
|
static encryptDES(data, key) { |
|
const keyHex = CryptoJS.enc.Utf8.parse(key); |
|
const encrypted = CryptoJS.DES.encrypt(data, keyHex, { |
|
mode: CryptoJS.mode.ECB, |
|
padding: CryptoJS.pad.Pkcs7, |
|
}); |
|
return encrypted.toString(); |
|
} |
|
|
|
/** |
|
* des 解密方法,同java:DesUtil.decryptFormBase64(encryptBase64, desKey); |
|
*/ |
|
static decryptDES(data, key) { |
|
const keyHex = CryptoJS.enc.Utf8.parse(key); |
|
const decrypted = CryptoJS.DES.decrypt( |
|
{ |
|
ciphertext: CryptoJS.enc.Base64.parse(data), |
|
}, |
|
keyHex, |
|
{ |
|
mode: CryptoJS.mode.ECB, |
|
padding: CryptoJS.pad.Pkcs7, |
|
} |
|
); |
|
return decrypted.toString(CryptoJS.enc.Utf8); |
|
} |
|
}
|
|
|