python中的AES-128(OFB模式),密钥或文本或IV大小的问题

时间:2015-11-08 13:52:19

标签: python encryption aes

我有一个字符串,我知道已使用AES-128加密。我可以使用这个PHP代码解密它:

$key  = "some-key";
$data = "VAZ8AePlKF+TD+tGFw==";

$crypt = base64_decode($data);

$text = mcrypt_decrypt (MCRYPT_RIJNDAEL_128, $key, $crypt, MCRYPT_MODE_OFB);

echo $text;

输出为Hello, world!,正如所料。

但是我想在python中实现这个代码,但是我得到关于密钥大小或文本大小或IV的错误...

这是我的代码:

from Crypto.Cipher import AES
import base64

key = 'some-key'
ciphertext_b64 = 'VAZ8AePlKF+TD+tGFw=='
ciphertext = base64.b64decode(ciphertext_b64)

mode = AES.MODE_OFB

decryptor = AES.new(key, mode)
plain = decryptor.decrypt(ciphertext)
print plain

有什么问题?有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

根据文档,key长度必须为16,24或32个字节。长度决定了使用哪种AES模式。因此,您需要确定所需的模式,然后将key填充到所需的大小:

  

key(byte string) - 在对称密码中使用的密钥。它必须是16(AES-128),24(AES-192)或32(AES-256)字节长。

如果要进行零填充,可以按如下方式填充32个字节:

padded_key = key + ("\x00" *  (32 - len(key)))

此外,密文必须是16个字节的倍数。如果它已经被加密,那么它应该已经是16字节的倍数。如果不是,那么可能是它的数据被破坏了。另一方面,在加密时,您通常需要填充纯文本,您可以使用:

pad_len = (-len(text)) % 16
padded_text = text + ("\x00" * pad_len)