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.