With the advent of PHP 7.2, the beloved Mcrypt extension will be phased out. As a developer, it's crucial to prepare for this change and consider adopting the more secure Openssl alternative.
This article focuses on a common challenge faced by developers during the transition: converting code from Mcrypt to Openssl while preserving AES 256 CBC and IVs.
Consider the following Mcrypt code:
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); }
To convert this code to Openssl, you should be aware of a crucial difference: Mcrypt's Rijndael-256 is not the same as AES-256. OpenSSL supports AES-256, which is Rijndael-128 with a 256-bit key.
Therefore, unfortunately, direct code conversion is not possible. You will have to re-encrypt all your data using proper AES-256 operations.
Furthermore, the current Mcrypt encryption scheme lacks authentication, proper padding, and byte-safety. It is highly recommended to adopt a more robust encryption library like defuse/php-encryption for improved security.
By understanding the differences between Mcrypt and Openssl and addressing the shortcomings of the existing encryption scheme, you can effectively prepare for the removal of Mcrypt in PHP 7.2 and maintain the integrity and security of your encrypted data.
The above is the detailed content of How to Migrate My PHP Mcrypt Encryption Code to OpenSSL in PHP 7.2?. For more information, please follow other related articles on the PHP Chinese website!