Encryption & Decryption AES-256-CFB in Python



我在ruby中有aes-256-cfb解密代码,如下所示。

data_cipher = OpenSSL::Cipher::Cipher.new "aes-256-cfb".freeze
data_cipher.decrypt
data_cipher.key = encryption_key
data_cipher.update(decode64(str)) << data_cipher.final

我需要与上述代码等效的python。我的问题是,在我为aes-256-cfb找到python逻辑的地方,它总是涉及初始化向量(IV(。但是在上面的Ruby逻辑中,没有设置iv。

我尝试了使用iv的Random值,但这并没有得到与ruby代码相同的结果。

请告知。

对于AES-256-CFB,加密总是需要一个iv。如果没有给出iv,那么它很可能只是零(这意味着16个0x00字节,因为iv等于128位的块大小(。另一种选择是在加密时随机生成iv,并将其封装在消息中。这意味着,消息的前16个字节是iv。如果你不知道加密算法是如何工作的,你可能需要尝试一下。

然而,由于iv仅用于在CFB模式下解密第一个块,如果您有足够长的消息,即使iv错误(消息的前128位除外(,解密也会很好。

下面是一个代码示例,介绍如何在python中进行解密。加密之前你需要知道iv。在下面的示例中,我用零字节初始化了它。

请注意,此代码仅处理原始消息字节的解密。您需要自己关心编码。

from Crypto import Random
from Crypto.Cipher import AES
def decrypt(key, enc):
iv = 'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00'
cipher = AES.new(key, AES.MODE_CFB, iv)
return cipher.decrypt(enc)

这里有更多信息(注意这个线程使用CBC模式,这有点不同(:Encrypt&使用PyCrypto AES 256 解密

最新更新