javascript - 在 aes-256-cbc 中加密的 CryptoJS 返回一个意外的值

标签 javascript cryptojs

我正在使用 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>

Working Stackblitz example

关于javascript - 在 aes-256-cbc 中加密的 CryptoJS 返回一个意外的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57416217/

相关文章:

javascript - 主干 - 除了一个属性之外,是否可以将更改事件绑定(bind)到模型?

javascript - 如何在带点的属性上使用 Ember 的 getter/setter?

javascript - JavaScript 中的三重 DES 加密和 PHP 中的解密

javascript - 在 JavaScript 中使用 RAW 二进制输出的 hash_hmac()

java - 从 Angular 8 加密时,解密文本(AES 128 位)开头的垃圾值

javascript - setAttribute 在 JavaScript 中不起作用

javascript - 如何使用 Javascript 或 jQuery 从 iFrame 获取控件

node.js - SHA-512 摘要的 NodeJS Base-64 编码

javascript - Jquery 代码优化 Mouseenter Mouseout