使CryptoJS和pycrypto兼容

时间:2013-12-03 18:47:44

标签: javascript python aes pycrypto cryptojs

我正在试图弄清楚如何将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) );

任何指针都很棒。感谢

2 个答案:

答案 0 :(得分:2)

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

  1. 在Python加密时使用MODE_CFBsegment_size=128
  2. 您必须根据RFC 2315 [页21]
  3. 使用Pkcs7填充字符串
  4. 在JS中收到base64版本的密文后,需要将其包装好 CryptoJS.lib.CipherParams.create({ ... })
  5. 看看适用于我的代码(Python 2.7.x):
    https://gist.github.com/marcoslin/8026990

答案 1 :(得分:0)

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

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

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

Base64((二进制IV)+(二进制Enc(消息)))

看看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>

抱歉,我无法提供更多帮助 -