php的mcrypt擴展已廢棄問題解決

php 的 mcrypt_ 函數簇在 7.1.0 版本中開始 deprecated,並在 7.2.0 版本中徹底廢棄。如果當前項目存在mcrypt_ encrypt這種函數又想更新php到最新版本


官方推薦使用openssl_encrypt/openssl_decrypt替代mcrypt_encryptmcrypt_decrypt


MCRYPT_RIJNDAEL_256 並不是 AES-256,如果想使用 mcrypt_簇 實現 AES-256,則你應該使用 MCRYPT_RIJNDAEL_128 算法 + 32位的 key,openssl_簇 則更爲清晰的明確了各種模式。這裏我整理了一下對應關係供大家參考:

MCRYPT_RIJNDAEL_128 & CBC + 16位Key = openssl_encrypt(AES-128-CBC, 16位Key) = AES-128
MCRYPT_RIJNDAEL_128 & CBC + 24位Key = openssl_encrypt(AES-192-CBC, 24位Key) = AES-192
MCRYPT_RIJNDAEL_128 & CBC + 32位Key = openssl_encrypt(AES-256-CBC, 32位Key) = AES-256


我們這裏寫個例子


mcrypt代碼:

<?php

$key = 'keykeykey';

//注意這裏我使用的32位的key
$key = md5(md5($key) . 'salt');

$iv = md5($key, true);

$data = 'asdfgh';

$encode = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CFB, $iv);

$encode = base64_encode($encode);

echo $encode . PHP_EOL;

//處理解密

$decode = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($encode), MCRYPT_MODE_CFB, $iv);

echo $decode;

echo PHP_EOL;


openssl代碼

$key = 'keykeykey';
$key = md5(md5($key) . 'salt');
$iv = md5($key, true);

$data = 'asdfgh';

$encode = openssl_encrypt($data, 'aes-256-cfb', $key, OPENSSL_RAW_DATA, $iv);

//完美替換$encode = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CFB, $iv);

$encode = base64_encode($encode);

echo $encode . '<br>';

//解密

$decode = openssl_decrypt(base64_decode($encode), 'aes-256-cfb', $key, OPENSSL_RAW_DATA, $iv);

echo $decode;


重點是openssl這裏,我使用的是aes-256-cfb(因爲mcrypt那裏使用的是32位的key,如果是16位的key請參考上面對應關係)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章