升级 PHP7.1 后 openssl 解密 mcrypt AES 数据不兼容问题的处理方法
发布:smiling 来源: PHP粉丝网 添加日期:2021-10-05 14:02:30 浏览: 评论:0
这篇文章主要介绍了升级 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 即可,除了会有警告。
Tags: PHP7 1 openssl mcrypt AES
相关文章
- ·golang调用php7详解及实例教程(2018-10-31)
- ·PHP7.0新增功能详解(实例)(2020-02-05)
- ·PHP7实现daemon守护进程详解(2020-04-05)
- ·变量在 PHP7 内部的实现(一)(2021-06-30)
- ·变量在 PHP7 内部的实现(二)(2021-06-30)
- ·PHP7之Mongodb API使用详解(2021-07-02)
- ·PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案(2021-08-12)
- ·PHP7下协程的实现方法详解(2021-08-23)
- ·基于PHP7错误处理与异常处理方法(详解)(2021-08-27)
- ·PHP7扩展开发之hello word实现方法详解(2021-08-30)
- ·PHP7扩展开发之基于函数方式使用lib库的方法详解(2021-08-30)
- ·PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】(2021-09-12)
- ·PHP7.1实现的AES与RSA加密操作示例(2021-10-01)
- ·深入理解 PHP7 中全新的 zval 容器和引用计数机制(2021-10-31)
- ·什么是PHP7中的孤儿进程与僵尸进程(2021-11-17)
- ·浅析PHP7的多进程及实例源码(2021-11-17)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)