我写这个问题+答案是因为我很挣扎(可能是因为缺乏经验),迷失在使用节点或 python 加密/解密事物的许多不同方式中。
我想也许我的案子可以在未来帮助人们。
我需要做的:
- 从表单中获取数据,使用 Crypto (node-js) 对其进行加密
- 在 Python 中传递加密数据并使用 PyCrypto 对其进行解密。
我选择使用 AES 加密。
这是我开始的方式(我不会经历我尝试过的所有事情):
我按照本页末尾的示例进行操作
就我而言,这给出了:
(这可能是 javascript 和 coffeescript 之间的一个非常糟糕的组合)
crypto = require "crypto" [...] key = "mykeywhatever" cipher = crypto.createCipher('aes192', key) cipher.update('string i want to encode', 'binary', 'hex') encoded_string = cipher.final('hex') [...]
这对我的字符串进行编码非常有效。
然后我编写了我的 python 脚本来解密这个字符串,使用PyCrypto 的 github 页面上的自述文件:
from Crypto.Cipher import AES [...] my_string = data_coming_from_rabbitmq obj = AES.new('mykeywhatever', AES.MODE_CBC) obj.decrypt(ciphertext) [...]
这显然不起作用:在自述文件中有一个 IV,但由于我没有在节点脚本中给出一个,为什么我要在 python 中给出一个呢?
经过更多的谷歌搜索,我了解到节点的 Crypto 使用 OpenSSL,而 PyCrypto 显然没有。所以我调查了一下,发现了这些页面:
所以事情变得复杂了,没有人做同样的事情来解密数据,我迷路了,寻求帮助。
答案是我和我的同事想出的(嗯,主要是我的同事)。