脚本宝典收集整理的这篇文章主要介绍了准备在PHP 7.2中删除Mcrypt,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我发现使用AES 256 CBC和保留IV很难从mcrypt切换到openssl.我对密码学有点新意,所以我真的不知道所有内容,但我理解基础知识.
function encrypt($masterPassword,$data) { $keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_CBC); $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($ivSize,MCRYPT_DEV_URANDOM); $key = mb_substr(hash('SHA256',$masterPassword),$keySize); $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key,$data,MCRYPT_MODE_CBC,$iv); return base64_encode($iv . $encrypted); } function decrypt($masterPassword,$base64) { $keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_CBC); $key = mb_substr(hash('SHA256',$keySize); $data = base64_decode($base64); $iv = substr($data,$ivSize); $encrypted = substr($data,$ivSize,strlen($data)); $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$encrypted,$iv); return trim($decrypted); }
不幸的是,您必须重新加密所有数据.
编辑:此外,您当前使用的方案有一些问题:
>它缺乏身份验证(HMAC是PHP中最简单的方法)
>它缺少适当的填充(mcrypt pad,零字节;你需要像PKCS#5填充这样的东西),这是块模式加密是安全的.
>它不是字节安全的(你使用的是mb_substr())
好消息是OpenSSL将自动为您执行PKCS#5填充,但您应该更进一步使用像defuse/php-encryption这样的可靠加密库.
以上是脚本宝典为你收集整理的准备在PHP 7.2中删除Mcrypt全部内容,希望文章能够帮你解决准备在PHP 7.2中删除Mcrypt所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。