升级 PHP7.1 后 openssl 解密 mcrypt AES 数据不兼容问题的处理方法
这是一个创建于374天前的主题,其中的信息可能已经有所发展或是发生改变。
$key="01234567891234560123456789123456"; $iv="0123456789123456"; //原本的mcrypt加密 $en_data=base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,"0123456789123456",MCRYPT_MODE_CBC,$iv)); var_dump("mcrypt_encrypt:"); var_dump(bin2hex(base64_decode($en_data))); var_dump($en_data); $de_data=mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,base64_decode($en_data),MCRYPT_MODE_CBC,$iv); var_dump("mcrypt_decrypt:"); var_dump($de_data); //OpenSSL加密 $en_data=base64_encode(openssl_encrypt("0123456789123456","aes-128-cbc",$key,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$iv)); var_dump("openssl_encrypt:"); var_dump(bin2hex(base64_decode($en_data))); var_dump($en_data); $de_data=openssl_decrypt(base64_decode($en_data),"aes-128-cbc",$key,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$iv); var_dump("openssl_decrypt:"); var_dump($de_data); var_dump(openssl_error_string());
输出
string'mcrypt_encrypt:'(length=15) string'098edde21e92cbc01078469509f877de'(length=32) string'CY7d4h6Sy8AQeEaVCfh33g=='(length=24) string'mcrypt_decrypt:'(length=15) string'0123456789123456'(length=16) string'openssl_encrypt:'(length=16) string'434b1b1eb39024f270672bcd16bfe7f9'(length=32) string'Q0sbHrOQJPJwZyvNFr/n+Q=='(length=24) string'openssl_decrypt:'(length=16) string'0123456789123456'(length=16) string'error:0607A082:digitalenveloperoutines:EVP_CIPHER_CTX_set_key_length:invalidkeylength'(length=89)
目前正在使用的是PHP的算法,使用了32位的秘钥和16位的向量。但是在openssl中这种加密出来的结果不一致,并且扔过来一个错误
不确定要如何才能处理用mcrypt加密的数据,用openssl解密,秘钥长度历史遗留问题没法改,libmcrypt的源码看不懂它如何兼容过长的秘钥
第1条附言 · 2017-06-2312:04:08+08:00
问题已解决:
$en_data=base64_encode(openssl_encrypt("0123456789123456","aes-256-cbc",$key,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$iv)); var_dump($en_data); $de_data=openssl_decrypt(base64_decode($en_data),"aes-256-cbc",$key,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$iv); var_dump($de_data);
换成aes-256-cbc即可,除了会有警告
总结
以上所述是小编给大家介绍的升级PHP7.1后openssl解密mcryptAES数据不兼容问题的处理方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!