我有一个字符串,我知道已使用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
有什么问题?有人可以帮我解决这个问题吗?
答案 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)