随着 PHP 7.2 的出现,深受喜爱的 Mcrypt 扩展将被逐步淘汰。作为开发人员,为这一变化做好准备并考虑采用更安全的 Openssl 替代方案至关重要。
本文重点介绍开发人员在过渡期间面临的常见挑战:将代码从 Mcrypt 转换为 Openssl,同时保留 AES 256 CBC 和 IV。
考虑以下 Mcrypt 代码:
function encrypt($masterPassword, $data) { // Mcrypt AES 256 CBC operations $key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize); $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv); return base64_encode($iv . $encrypted); } function decrypt($masterPassword, $base64) { // Mcrypt AES 256 CBC operations $key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize); $data = base64_decode($base64); $iv = substr($data, 0, $ivSize); $encrypted = substr($data, $ivSize, strlen($data)); $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC, $iv); return trim($decrypted); }
转换将此代码发送到 Openssl,您应该意识到一个关键的区别:Mcrypt 的 Rijndael-256 与 AES-256 不同。 OpenSSL 支持 AES-256,即具有 256 位密钥的 Rijndael-128。
因此,不幸的是,直接代码转换是不可能的。您必须使用正确的 AES-256 操作重新加密所有数据。
此外,当前的 Mcrypt 加密方案缺乏身份验证、适当的填充和字节安全。强烈建议采用更强大的加密库,如 defuse/php-encryption,以提高安全性。
通过了解 Mcrypt 和 Openssl 之间的差异,并解决现有加密方案的缺点,可以有效地为在 PHP 7.2 中删除 Mcrypt 并维护加密数据的完整性和安全性。
以上是如何在 PHP 7.2 中将我的 PHP Mcrypt 加密代码迁移到 OpenSSL?的详细内容。更多信息请关注PHP中文网其他相关文章!