openssl_encrypt 替换 mcrypt_encrypt 加密方式对应搜集、寻找匹配方法
由于 php7.1+ 弃用了 mcrypt_encrypt(),必须使用 openssl_encrypt() 来替换。
但是之前使用的是 mcrypt_encrypt(MCRYPT_DES, $k) MCRYPT_DES 加密方式,且与 openssl_encrypt 加密方式名称又不一致。
如何找到 openssl_encrypt 对应的加密方式?
用程序一个一个试了:
$fs = openssl_get_cipher_methods(); //获得所有的加密方式 foreach($fs as $v){ try{ $data = openssl_encrypt($encrypt, $v, $key, OPENSSL_RAW_DATA); $str = base64_encode($data); if($str == 'BmYqODaiBvM='){ //如果加密后与老的密文一致,按就对了。 echo 'ok:'.$v.';'; die; } }catch (\ErrorException $e){ //报错的大部分是 iv 不能空,捕捉异常,保证循环正常 } } echo 'no'; die; //如果都没匹配到,那就真没有。不想看到这个。 结果输出: ok:DES-ECB;
说明:mcrypt_encrypt 的 MCRYPT_DES 对应 openssl_encrypt 的 DES-ECB;
根据这个思路,下次有空,做一个验证工具出来。