加密解密 Python PHP 转换 AES



我有这个问题,在使用 aes 256 cbc 加密在 python 中加密某些内容,如 python 代码加密方法所示。

我正在尝试在 php 中创建一个解密方法,以实际解密使用 python 类加密的内容。

这是我尝试将python解密方法转换为php的尝试,它看起来是否正确,或者我在转换中缺少某些内容,因为每次我使用php版本解密时,它都说hmac失败了?

我将不胜感激将 Python 类转换为 PHP 的任何帮助。

public function decrypt(){
        $encrypt_method ="AES-256-CBC";
        $secret_key =base64_decode('samekeyusedintheencryption');
        $encrypted=(string)'some encrypted text to be decrypted';
        $data=json_decode(base64_decode($encrypted),true);
        $secret_iv =base64_decode($data['iv']);
        $output = openssl_decrypt($data['value'], 
        $encrypt_method,$secret_key,0,$secret_iv);
        return  json_encode($output);
    }

    def decrypt(self, payload):
        data = json_c.decode(base64.b64decode(payload))
        value =  base64.b64decode(data['value'])
        iv = base64.b64decode(data['iv'])
        crypt_object=AES.new(self.key,AES.MODE_CBC,iv)
        plaintext = crypt_object.decrypt(value)
        return loads(plaintext)

好的,我让它工作了!

function decrypt($encryptedText, $secret_key){
$secret_key = base64_decode($secret_key);
$encrypt_method ="AES-256-CBC";
$data = json_decode(base64_decode($encryptedText),true);
$data['iv'] = base64_decode($data['iv']);
$data['value'] = base64_decode($data['value']);
return openssl_decrypt($data['value'], $encrypt_method, $secret_key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $data['iv']);
}

我学到的一些东西:如果 openssl 函数中的选项设置为"0",则需要密文的base64_encoded输入。 此外,如果默认选项设置为"0",则填充默认值设置为 PKCS#7。 我认为,这就是我们出现坏块大小错误的原因。

因此,需要base64_decoded密文,我们需要为填充设置两个选项。

我能够解密您提供的密码文本并查看电子邮件地址。

在数据数组中为您提供了MAC,因此这将允许您在PHP脚本中检查MAC。 这使您可以确保数据未被篡改。

我最近做了一个加密项目,从开放的SSL开始,但最终改为libSodium 库。 我强烈建议您查看任何进一步的项目。

干杯!

最新更新