php7+中怎么使用openssl替代mcrypt进行AES加密解密
这篇文章主要介绍php7+中怎么使用openssl替代mcrypt进行AES加密解密,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
mcrypt十年过去,现在php7+中已经开始淘汰。官方给出掉提示:
mcrypt_get_block_size—获得加密算法的分组大小 Warning ThisfunctionhasbeenDEPRECATEDasofPHP7.1.0.Relyingonthisfunctionishighlydiscouraged.
在php7中需要openssl替代,这里需要注意的是: 在mcrypt中对加密key长度没有限制要求,传入多少长度都会参加加密,但是在openssl_encrypt中。key长度只能是16长度,>16长度后,签名结果保持不变,这里是哥坑,在替代方案测试时候容易出错,具体直接上代码对比:
低于php7版本代码
classAES{ publicstaticfunctionencrypt($input,$key){ $blockSize=mcrypt_get_block_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB); $paddedData=static::pkcs5_pad($input,$blockSize); $ivSize=mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB); $iv=mcrypt_create_iv($ivSize,MCRYPT_RAND); $encrypted=mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$paddedData,MCRYPT_MODE_ECB,$iv); returnbin2hex($encrypted); } privatestaticfunctionpkcs5_pad($text,$blocksize){ $pad=$blocksize-(strlen($text)%$blocksize); return$text.str_repeat(chr($pad),$pad); } publicstaticfunctiondecrypt($sStr,$key){ $decrypted=mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $key, hex2bin($sStr), MCRYPT_MODE_ECB ); $dec_s=strlen($decrypted); $padding=ord($decrypted[$dec_s-1]); $decrypted=substr($decrypted,0,-$padding); return$decrypted; } /** *url安全的base64编码sunlonglong */ functionbase64url_encode($data){ returnrtrim(strtr(base64_encode($data),'+/','-_'),'='); } /** *url安全的base64解码sunlonglong */ functionbase64url_decode($data){ returnbase64_decode(str_pad(strtr($data,'-_','+/'),strlen($data)%4,'=',STR_PAD_RIGHT)); } } $key='g87y65ki6e8p93av8zjdrtfdrtgdwetd'; $encrypt=AES::encrypt('123abc',$key); $decrypt=AES::decrypt($encrypt,$key); var_dump($encrypt,$decrypt); 加密结果: da07f6363eb0024b4bdd264e5fd4a2f5
下面是php7以上。使用openssl加密:
classAES{ /** * *@paramstring$string需要加密的字符串 *@paramstring$key密钥 *@returnstring */ publicstaticfunctionencrypt($string,$key) { //openssl_encrypt加密不同Mcrypt,对秘钥长度要求,超出16加密结果不变 $data=openssl_encrypt($string,'AES-128-ECB',$key,OPENSSL_RAW_DATA); $data=strtolower(bin2hex($data)); return$data; } /** *@paramstring$string需要解密的字符串 *@paramstring$key密钥 *@returnstring */ publicstaticfunctiondecrypt($string,$key) { $decrypted=openssl_decrypt(hex2bin($string),'AES-128-ECB',$key,OPENSSL_RAW_DATA); return$decrypted; } } $encrypt=AES::encrypt('123abc','g87y65ki6e8p93av8zjdrtfdrtgdwetd'); $decrypt=AES::decrypt($encrypt,'g87y65ki6e8p93av8zjdrtfdrtgdwetd'); var_dump($encrypt,$decrypt);die; 加密结果: 8c927c42f93a83c5de763aa18e4e6c7d
虽然key长度32位,但是openssl_encrypt加密时候,key长度只使用了16长度,后面未参加签名,而mcrypt_encrypt会整个key参与加密,这样就会出现加密出来对结果不一致。造成困惑,key=g87y65ki6e8p93av8zjdrtfdrtgdwetd与key=g87y65ki6e8p93av结果都是一致对;
以上是“php7+中怎么使用openssl替代mcrypt进行AES加密解密”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
PHP7函数类型限定对性能有没有影响
PHP7函数类型限定对性能有没有影响这篇文章主要介绍PHP7函数类...
-
PHP7中生命周期指的是什么
-
declare如何在PHP7中使用
-
如何在PHP7中使用匿名类
-
PHP7中如何使用Closure :: call
这篇“PHP7中如何使用Closure::call”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定...
-
PHP7打开Opcache的方法
-
php7中文乱码怎么办
小编给大家分享一下php7中文乱码怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有...
-
php7连接mysql数据库的方法
这篇文章主要为大家展示了php7连接mysql数据库的方法,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起...
-
怎么安装php7并与php5共存
这篇“怎么安装php7并与php5共存”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“怎么安装php7并与php5共...
-
Windows Server 2016服务器配置指南之怎么搭建PHP7运行环境