0

我试图弄清楚如何将 CryptoJS 库用于 AES,但文档有些稀缺。

我已经按照他们的示例进行操作,但似乎无法解码我在 PyCrypto 中编码的内容

我已经格式化如下:

key = '0f3f0fe38eb5f216cb4ef0649f81d761'
ciphertext = 'Y+gwBI6R37Ko1lQmwZ57gg==FqUSqQ=='

密文有两个组成部分

iv: Y+gwBI6R37Ko1lQmwZ57gg==
encoded message: FqUSqQ==

我尝试运行下面的代码,但没有成功。它在控制台中记录“”。它应该解决“测试”

var decrypted =CryptoJS.AES.decrypt(ciphertext, key);
console.log( decrypted.toString(CryptoJS.enc.Utf8) );

任何指针都会很棒。谢谢

4

2 回答 2

2

我也遇到了这个问题,不幸的是,要与之pycrypto交谈非常棘手crypto-js。以下是对我有用的组合:

  1. 在 Python 中加密时使用MODE_CFBwithsegment_size=128
  2. 根据 RFC 2315 [第 21 页],您必须使用 Pkcs7 填充您的字符串
  3. 一旦你在 JS 中收到 base64 版本的密文,你需要将它包装在 CryptoJS.lib.CipherParams.create({ ... })

看看对我有用的代码(Python 2.7.x):
https ://gist.github.com/marcoslin/8026990

于 2013-12-18T21:51:37.353 回答
0

我没有使用 CryptoJS 的直接经验,但有多年使用各种其他加密库的经验。几乎可以肯定,CryptoJS.AES.decrypt 期望的密文格式与您使用的密文格式不同。您的密文是两个独立的 Base64 编码实体的串联:

Base64(IV) + Base64(Enc(消息))

如果 CryptoJS.AES.decrypt 期望将 IV 指定为密文的一部分(它可能不会),并且期望完全使用 Base64 编码的密文输入(它可能不会),那么我会尝试传递:

Base64((二进制 IV)+(二进制编码(消息)))

查看 CryptoJS 文档,我与您一样感到沮丧。但是有一个带有“手动指定IV”的加密示例可能会提供线索。

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script>
    var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
    var iv  = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');

    var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });
</script>

对不起,我不能更有帮助-

于 2013-12-11T16:59:22.303 回答