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中生命周期指的是什么
这篇文章给大家分享的是有关PHP7中生命周期指的是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。P...
-
declare如何在PHP7中使用
今天就跟大家聊聊有关declare如何在PHP7中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大...
-
如何在PHP7中使用匿名类
今天就跟大家聊聊有关如何在PHP7中使用匿名类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这...
-
PHP7中如何使用Closure :: call
这篇“PHP7中如何使用Closure::call”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定...
-
PHP7打开Opcache的方法
这篇文章将为大家详细讲解有关PHP7打开Opcache的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可...
-
php7中文乱码怎么办
小编给大家分享一下php7中文乱码怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有...
-
php7连接mysql数据库的方法
这篇文章主要为大家展示了php7连接mysql数据库的方法,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起...
-
怎么安装php7并与php5共存
这篇“怎么安装php7并与php5共存”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“怎么安装php7并与php5共...
-
Windows Server 2016服务器配置指南之怎么搭建PHP7运行环境
这篇文章主要介绍WindowsServer2016服务器配置指南之怎么搭建PHP7运行环境,文中介绍的非常详细,具有一定的参考...
