首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AES-128-CBC取消返回错误的值

AES-128-CBC取消返回错误的值
EN

Stack Overflow用户
提问于 2020-02-24 15:39:05
回答 1查看 98关注 0票数 2

我试图通过javascript创建一个AES-128-CBC解密

到目前为止,我这样做了:

代码语言:javascript
运行
复制
    <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
<script>
 var rawStr = "MyPassword";
      var secret = 'EL12ec@REteLe(0M';
      var wordArray = CryptoJS.enc.Utf8.parse(rawStr);
      var base64 = CryptoJS.enc.Base64.stringify(wordArray);
      var encrypted = '' + CryptoJS.AES.encrypt(base64, secret);
      console.log('base64:', base64);
      console.log('encrypted:', encrypted);
</script>

但是我得到的值是:TXlQYXNzd29yZA==

正确的值是:基于这个在线加密工具的S9bEDxeu/jr+8CdRkiUEog==https://www.devglan.com/online-tools/aes-encryption-decryption

谁可以帮助我如何实现这一点,以获得相同的结果加密一样,像开发工具?

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2020-02-24 21:24:40

要重现网站的结果,必须考虑以下几点:

  • 必须将密钥作为WordArray传递给CryptoJS.AES.encrypt。否则,它将被解释为密码,here.
  • The CBC模式(CryptoJS默认值,here)需要IV,必须将IV作为WordArray传递给CryptoJS.AES.encrypt (如果网站上未指定IV,则隐式使用0-vector )。
  • CryptoJS.AES.encrypt的返回值是一个CipherParams对象,它封装了密文以及其他内容

代码语言:javascript
运行
复制
var rawStr = "MyPassword";
var secret = CryptoJS.enc.Utf8.parse('EL12ec@REteLe(0M');
var iv = CryptoJS.enc.Utf8.parse('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0');
var encrypted = CryptoJS.AES.encrypt(rawStr, secret, {iv: iv});
console.log('Output:',  CryptoJS.enc.Base64.stringify(encrypted.ciphertext)); // Output: S9bEDxeu/jr+8CdRkiUEog==
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9/crypto-js.min.js"></script>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60371358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档