加密Decrypt Python PHP转换AES

时间:2018-03-08 09:44:32

标签: php python encryption aes

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

我正在尝试在php中创建一个Decrypt方法来实际解密使用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)

1 个答案:

答案 0 :(得分:2)

好的,我让它上班了!

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' padding默认设置为PKCS#7。我认为,这就是为什么我们遇到坏块大小错误。

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

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

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

我最近做了一个加密项目并以open ssl开始,但最终改为libSodium库。我强烈建议您查看其他任何项目。

干杯!