gpt4 book ai didi

python - AES - 使用 Crypto (node-js) 加密/使用 Pycrypto (python) 解密

转载 作者:IT老高 更新时间:2023-10-28 21:02:15 28 4
gpt4 key购买 nike

我写这个问题+答案是因为我很挣扎(可能是因为缺乏经验),迷失在使用 node 或 python 加密/解密的许多不同方式中。

我想也许我的案例可以帮助 future 的人们。

我需要做什么:

  • 从表单中获取数据,使用 Crypto (node-js) 对其进行加密
  • 在 Python 中传递加密数据并使用 PyCrypto 解密。

我选择使用 AES 加密。

我是这样开始的(我不会经历我尝试过的所有事情):

  • 我按照this page结尾的例子

    在我的情况下给出了:

    (这可能是 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's github's page 上的自述文件。 :

    from Crypto.Cipher import AES
    [...]
    my_string = data_coming_from_rabbitmq
    obj = AES.new('mykeywhatever', AES.MODE_CBC)
    obj.decrypt(ciphertext)
    [...]

    这显然不起作用:在自述文件中有一个 IV,但由于我没有在 Node 脚本中给出一个,为什么我要在 python 中给出一个?

经过更多谷歌搜索,我了解到 node 的 Crypto 使用 OpenSSL,而 PyCrypto 显然没有。所以我调查了一下,发现了那些页面:

所以事情变得复杂了,没有人做同样的事情来解密数据,我迷路了,寻求帮助。

答案是我和我的同事想出的(嗯,主要是我的同事)。

最佳答案

所以我们从“我如何解密... OpenSSL”的答案开始。

  • 我们需要修改加密脚本:

    crypto = require "crypto"
    [...]
    var iv = new Buffer('asdfasdfasdfasdf')
    var key = new Buffer('asdfasdfasdfasdfasdfasdfasdfasdf')
    var cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
    cipher.update(new Buffer("mystring"));
    var enc = cipher.final('base64');
    [...]

    iv 需要 16 字节长,key 是 32 字节。我们将 createCipher 更改为 createCipheriv

  • 回到python解密脚本:

    进程只是阅读 PyCrypto 的文档,并比较 with the code we started from .

    然后我们决定只使用 stick to the API ,并从头开始。它给出了:

    from base64 import b64decode
    from Crypto.Cipher import AES
    [...]
    iv = 'asdfasdfasdfasdf'
    key = 'asdfasdfasdfasdfasdfasdfasdfasdf'
    encoded = b64decode('my_encrypted_string')

    dec = AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
    value = dec.decrypt(encoded)

就这么简单...希望对大家有所帮助!

更新:

正如 Perseids 在其回答的评论中所写,IV 必须是随机的,并且对于每条消息都不同

关于python - AES - 使用 Crypto (node-js) 加密/使用 Pycrypto (python) 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18236761/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com