如何解决升级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 'CY7d4h7Sy8AQeEaVCfh43g==' (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 即可,除了会有警告

原创文章,作者:CVGHX,如若转载,请注明出处:http://www.wangzhanshi.com/n/16337.html

(0)
CVGHX的头像CVGHX
上一篇 2025年1月2日 12:39:09
下一篇 2025年1月2日 12:39:11

相关推荐

  • SSL证书转换操作的流程

    SSL证书转换如何操作?    对于SSL证书转换操作的流程,在一定的环境下是比较好操作的。整体流程也不是非常难。现在对于SSL数字证书的使用已经发展到网络的每…

    2025年1月2日
  • openssl扩展怎么在php中安装

    在php中使用RSA算法的时候,需要调用openssl_get_publickey方法,但同时需要对php编译openssl扩展,否则会提示以下错误: Call to&n…

    ssl证书 2025年1月2日
  • SSL证书品牌有哪些以及选择的方法

    网站当中如果有一定的安全证书,就可以更好的保护网站信息安全,防止信息被不法分子盗用。因此,很多企业都会给自己的网站配置SSL证书,不过配置该证书之前需要先去申请。据了解,SSL证书…

    2025年1月2日
  • 二级域名使用ssl证书的好处是什么

    SSL证书是一种配置在网站服务器当中的一种安全证书,主要的作用是加密,可以在一定程度上提高网站的安全性,防止网站当中的信息被泄露出去。但是,如今有很多企业都会考虑二级域名ssl证书…

    2025年1月2日
  • Ubuntu中怎么编译openssl

    Ubuntu编译openssl的示例: 在Ubuntu上通过命令行依次输入以下命令编译安装openssl。 su root #切换root用户cd /usr/srcwget htt…

    ssl证书 2025年1月2日
  • openssl rc5 ecb模式

    ECB(Electronic Code Book)/电码本模式原理非常简单数据按照8个字节一段进行加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字…

    ssl证书 2025年1月2日
  • 免费申请ssl证书的缺点是什么

    有了解过互联网的网友都会知道SSL证书在互联网传输中起着很重要的作用,SSL证书不仅仅很好的保护了客户的信息数据安全,也很好地维护了网站的可信度与安全度。不仅仅是企业给自己的网站部…

    2025年1月2日
  • 基于openssl的base64加解密是怎样的

    1.什么是base64  base64指64个可打印字符,“A-Z” 、“a~z”、 “0~9” 、 “+” 、“/” 共64个。一般使用base64来表示二进制数据(二…

    ssl证书 2025年1月2日
  • 怎么在php中开启openssl

    windows下开启方法: 1: 首先检查php.ini中;extension=php_openssl.dll是否存在, 如果存在的话去掉前面的注释符‘;', 如果不存在…

    ssl证书 2025年1月2日
  • ssl证书在哪里购买比较好,如何选择?

    ssl证书在哪里购买比较好,如何选择?很多人都不太了解,今天小编为了让大家更加了解ssl证书,所以给大家总结了以下内容,一起往下看吧。 网站的安全性是很重要的,因此为了保护网站的信…

    2025年1月2日

发表回复

登录后才能评论