您好,登錄后才能下訂單哦!
php 的 mcrypt_ 函數簇在 7.1.0 版本中開始 deprecated,并在 7.2.0 版本中徹底廢棄。如果當前項目存在mcrypt_ encrypt這種函數又想更新php到最新版本
官方推薦使用openssl_encrypt/openssl_decrypt替代mcrypt_encrypt和mcrypt_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請參考上面對應關系)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。