服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - 升级 PHP7.1 后 openssl 解密 mcrypt AES 数据不兼容问题的处理方法

升级 PHP7.1 后 openssl 解密 mcrypt AES 数据不兼容问题的处理方法

2019-09-20 14:48loveyu PHP教程

这篇文章主要介绍了升级 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:digital envelope routines:EVP_CIPHER_CTX_set_key_length:invalid key length' (length=89)

目前正在使用的是 PHP 的算法,使用了 32 位的秘钥和 16 位的向量。但是在 openssl 中这种加密出来的结果不一致,并且扔过来一个错误

不确定要如何才能处理用 mcrypt 加密的数据,用 openssl 解密,秘钥长度历史遗留问题没法改,libmcrypt 的源码看不懂它如何兼容过长的秘钥

第 1 条附言  ·  2017-06-23 12: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 解密 mcrypt AES 数据不兼容问题的处理方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

延伸 · 阅读

精彩推荐
  • PHP教程asp函数split()对应php函数explode()

    asp函数split()对应php函数explode()

    今天小编就为大家分享一篇关于asp函数split()对应php函数explode(),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    我是高手高手高高手4442019-06-09
  • PHP教程php工具型代码之印章抠图

    php工具型代码之印章抠图

    这篇文章主要为大家详细介绍了php工具型代码之印章抠图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    qq_292380092392019-09-18
  • PHP教程PHP实现的随机IP函数【国内IP段】

    PHP实现的随机IP函数【国内IP段】

    这篇文章主要介绍了PHP实现的随机IP函数,可实现输出国内IP段的功能,涉及php字符串与数组的计算操作相关技巧,需要的朋友可以参考下...

    lee1912019-06-06
  • PHP教程PHP7新特性之抽象语法树(AST)带来的变化详解

    PHP7新特性之抽象语法树(AST)带来的变化详解

    这篇文章主要介绍了PHP7新特性之抽象语法树(AST)带来的变化,结合实例形式分析了PHP7抽象语法树的相关概念、功能、特性、使用方法及相关注意事项,需要的朋友可以参考下 ...

    ivan8208193912019-09-19
  • PHP教程php实现小程序支付完整版

    php实现小程序支付完整版

    这篇文章主要为大家详细介绍了php实现小程序支付完整版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    大脸猫脸大2542019-09-03
  • PHP教程php断点续传之文件分割合并详解

    php断点续传之文件分割合并详解

    这篇文章主要为大家详细介绍了php断点续传之文件分割合并,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    _xiaoxiong1312019-09-08
  • PHP教程php redis 处理websocket聊天记录的实例代码

    php redis 处理websocket聊天记录的实例代码

    本文通过实例代码给大家介绍了php redis 处理websocket聊天记录的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 ...

    撑一支船蒿4422019-09-20
  • PHP教程Ubuntu中支持PHP5与PHP7双版本的简单实现

    Ubuntu中支持PHP5与PHP7双版本的简单实现

    这篇文章主要给大家介绍了关于Ubuntu中支持PHP5与PHP7双版本的简单实现方法,文中通过示例代码介绍的非常详细,这个方法也非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧...

    虞大胆4242019-09-11