我正在使用 CryptoJS 加密一些数据并将其与 an online tool 进行比较我没有得到相同的结果。事实上,CryptoJS 的结果无法用该工具解密。
我正在尝试使用以下参数在 AES-256-CBC 中加密:
text = '111222333'
iv = 'I8zyA4lVhMCaJ5Kg'
key = '6fa979f20126cb08aa645a8f495f6d85'
这是我的代码:
let text = '111222333';
aesEncrypt(data) {
let key = '6fa979f20126cb08aa645a8f495f6d85'; //length 32
let iv = 'I8zyA4lVhMCaJ5Kg'; //length 16
let cipher = CryptoJS.AES.encrypt(data, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return cipher.toString();
}
aesEncrypt(text);
生成的加密字符串是U2FsdGVkX1+f3UywYmIdtb50bzdxASRCSqB00OijOb0=
,而通过在线工具得到的是B6AeMHPHkEe7/KHsZ6TW/Q==
。为什么不一样,我好像用的是一样的参数?
我使用 CryptoJS 的计划是在客户端加密一些数据,然后在需要时能够在服务器端对其进行解密。但是两个加密值的差异阻止了我这样做。
最佳答案
如何将您的数据编码为 UTF-8。就像“在线工具”所做的那样。
使用CryptoJS.enc.Utf8.parse
实现我所说的。
aesEncrypt (data) {
const key = '6fa979f20126cb08aa645a8f495f6d85'
const iv = 'I8zyA4lVhMCaJ5Kg'
const cipher = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv), // parse the IV
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
})
// e.g. B6AeMHPHkEe7/KHsZ6TW/Q==
return cipher.toString()
}
使用 CryptoJS 的代码片段。
function aesEncrypt (data) {
const key = '6fa979f20126cb08aa645a8f495f6d85'
const iv = 'I8zyA4lVhMCaJ5Kg'
const cipher = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv),
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
})
return cipher.toString()
}
// e.g. B6AeMHPHkEe7/KHsZ6TW/Q==
console.log(aesEncrypt('111222333'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
关于javascript - 在 aes-256-cbc 中加密的 CryptoJS 返回一个意外的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57416217/