php decrypt,php openssl_decrypt 解密取代mcrypt_decrypt问题

本文探讨了在使用openssl_decrypt和mcrypt_decrypt解密AES-128-ECB加密字符串时,为何需要指定OPENSSL_ZERO_PADDING。作者揭示了OpenSSL与Mcrypt在填充方式上的区别,并解释了为何在OpenSSL中明确填充方式的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

openssl_decrypt使用的时候第四个参数填写为OPENSSL_ZERO_PADDING即可解开

$ret = openssl_decrypt('N3fthdRHiCTmj2kyoiUOlw==', 'AES-128-ECB', 'v466vazrnpeng66r',OPENSSL_ZERO_PADDING);

$ret = rtrim($ret, "\0");

var_export($ret);

$ret = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, 'v466vazrnpeng66r', base64_decode('N3fthdRHiCTmj2kyoiUOlw=='), 'ecb');

$ret = rtrim($ret, "\0");

var_export($ret);

为什么要加OPENSSL_ZERO_PADDING,我的理解是mcrypt_decrypt可以解开这个加密串,应该密文采用的填充方式应该是补0填充的,所以openssl解密需要指定OPENSSL_ZERO_PADDING填充方式解密。因为openssl_encrypt中options选项0和1默认采用都是PKCS7填充方式

而OPENSSL_ZERO_PADDING是补0填充。

在openssl_encrypt中参数option的含义

options :

0 : 自动对明文进行 padding, 返回的数据经过 base64 编码.

1 : OPENSSL_RAW_DATA, 自动对明文进行 padding, 但返回的结果未经过 base64 编码.

2 : OPENSSL_ZERO_PADDING, 自动对明文进行 0 填充, 返回的结果经过 base64 编码. 但是, openssl 不推荐 0 填充的方式, 即使选择此项也不会自动进行 padding, 仍需手动 padding.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值