使CryptoJS和pycrypto兼容

2024-10-03 23:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图弄清楚如何使用用于AES的CryptoJS库,但是文档有点少。在

我遵循了他们的例子,但我似乎无法解码我用PyCrypto编码的东西

我的格式如下:

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

密文有两个组成部分

^{pr2}$

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

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

任何建议都会很好。谢谢


Tags: key文档编码格式解码例子aesdecrypted
2条回答

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

Base64(IV)+Base64(加密(消息))

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

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>

抱歉,我帮不了你-

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

  1. 在Python中加密时,将MODE_CFB与{}一起使用
  2. 您必须按照RFC 2315[第21页]的要求用Pkcs7填充您的字符串
  3. 一旦您在JS中收到了base64版本的密文,就需要将其包装起来 CryptoJS.lib.CipherParams.create({ ... })

请看一下适用于我的代码(python2.7.x):
https://gist.github.com/marcoslin/8026990

相关问题 更多 >