准备在PHP 7.2中删除Mcrypt
发布时间:2020-12-13 18:01:51 所属栏目:PHP教程 来源:网络整理
导读:因此,随着时间的推移,mcrypt将进入 PHP 7.2. 当然还有另一种选择:openssl. 我发现使用AES 256 CBC和保留IV很难从mcrypt切换到openssl.我对密码学有点新意,所以我真的不知道所有内容,但我理解基础知识. 假设我有以下代码 function encrypt($masterPassword,$
因此,随着时间的推移,mcrypt将进入
PHP 7.2.
当然还有另一种选择:openssl. 我发现使用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); } 如何“转换”此代码以使用mcrypt的openssl?
你不能转换它,因为Rijndael-256不是AES-256,而OpenSSL扩展不支持Rijndael-256.
AES-256是Rijndael-128,带有256位(32字节)密钥. 不幸的是,您必须重新加密所有数据. 编辑:此外,您当前使用的方案有一些问题: >它缺乏身份验证(HMAC是PHP中最简单的方法) 好消息是OpenSSL将自动为您执行PKCS#5填充,但您应该更进一步使用像defuse/php-encryption这样的可靠加密库. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |