我正在使用Zend2 Crypt 模块来加密数据。这是我的代码。
$cipher = BlockCipher::factory('mcrypt', array(
'algorithm' => 'aes',
));
$cipher->setKey('mypassphrase');
$encrypted = $cipher->encrypt('Hey, I am the secret data');
酷,效果很好!现在,我需要$encrypted
在 Python 中解密该数据(嘿,我是秘密数据)。
我正在使用 pycrypto 来做到这一点。在我的 PHP 环境之外解密数据的步骤是什么?
from Crypto.Cipher import AES
import base64
import hashlib
password = 'mypassphrase'
key = hashlib.sha256(password).digest()
decoded = base64.standard_b64decode(encrypted)
cipher = AES.new(key, AES.MODE_CBC)
data = cipher.decrypt(decoded)
我需要指定一个,IV
因为 Zend 默认使用 MODE_CBC。如何在我的 Python 代码中指定它?
这是 Zend2 文档:
加密的输出是一个以 Base64(默认)编码的字符串,其中包含 HMAC 值、IV 向量和加密文本。使用的加密模式是 CBC(默认为随机 IV)和 SHA256 作为 HMAC 的默认哈希算法。默认情况下,Mcrypt 适配器使用 PKCS#7 填充机制进行加密。您可以使用特殊的适配器(Zend\Crypt\Symmetric\Padding)指定不同的填充方法。BlockCipher 使用的加密和身份验证密钥是使用 PBKDF2 算法生成的,用作从使用 setKey() 方法指定的用户密钥的密钥派生函数。
有人可以帮助我调整我的 Python 代码来解密数据吗?谢谢