php7 中怎么使用openssl替代mcrypt进行aes加密解密-mile米乐体育

这篇文章主要介绍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加密解密”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!

展开全文
内容来源于互联网和用户投稿,文章中一旦含有米乐app官网登录的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系米乐app官网登录删除

最新文章

网站地图