今天把php升級到7.1了,結果發現這個函數不建議使用:
mcrypt_module_open() is deprecated
請問還有其它方案來替換嗎?
==============================
因為7.1還沒有正式發布,而且7.1的發布文檔上面寫了以後不建義使用類似mcrypt的擴展,所以該問題目前無解。如果有遇到相同問題的同學,請使用5版或7.0版 。
今天把php升級到7.1了,結果發現這個函數不建議使用:
mcrypt_module_open() is deprecated
請問還有其它方案來替換嗎?
==============================
因為7.1還沒有正式發布,而且7.1的發布文檔上面寫了以後不建義使用類似mcrypt的擴展,所以該問題目前無解。如果有遇到相同問題的同學,請使用5版或7.0版 。
非常不認同 @eechen 的說法,誰說手冊上沒說的! ?
http://php.net/manual/zh/migr...
引用手冊原文:
<code>mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。</code>
在PHP 7.1中還能在PHP安裝包中找到並使用mycrypt擴展,在PHP 7.2中會被移除,不過我們依然可以從PECL下載到源碼,編譯和安裝這個擴展。
不過最好還是遵循PHP的建議,透過OpenSSL逐漸取代mcrypt所扮演的角色。
可以使用非對稱加密方式!公鑰加密,私鑰解密。
mcrypt 擴展在 7.1 已經被 deprecated, 在 7.2 會被從內置遷移到 PECL 裡。
如果需要完全相容只能忽略 deprecated 使用;
如果只是需要類似功能的替代品,官方建議是使用 OpenSSL 擴充。
具體可以看官方手冊。
但是手冊上並沒有deprecated
的Warning呀,自然也就沒有說明替代方案.
而且我用PHP 7.0運行也沒有這個不建議使用的提示.
最後就是你說的7.1還沒有正式發布,你可以把它當作一個bug.
補充:
多謝樓下提醒,PHP手冊在7.1遷移頁給出了替代方案,就是用OpenSSL取代MCrypt.
下面看看用OpenSSL實現對稱加密AES和非對稱加密RSA.
<code>AES: <?php header('Content-Type: text/plain;charset=utf-8'); $data = 'phpbest'; $key = 'oScGU3fj8m/tDCyvsbEhwI91M1FcwvQqWuFpPoDHlFk='; //echo base64_encode(openssl_random_pseudo_bytes(32)); $iv = 'w2wJCnctEG09danPPI7SxQ=='; //echo base64_encode(openssl_random_pseudo_bytes(16)); echo '内容: '.$data."\n"; $encrypted = openssl_encrypt($data, 'aes-256-cbc', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv)); echo '加密: '.base64_encode($encrypted)."\n"; $encrypted = base64_decode('To3QFfvGJNm84KbKG1PLzA=='); $decrypted = openssl_decrypt($encrypted, 'aes-256-cbc', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv)); echo '解密: '.$decrypted."\n"; ?> RSA: 用openssl生成rsa密钥对(私钥/公钥): openssl genrsa -out rsa_private_key.pem 1024 openssl rsa -pubout -in rsa_private_key.pem -out rsa_public_key.pem <?php header('Content-Type: text/plain;charset=utf-8'); $data = 'phpbest'; echo '原始内容: '.$data."\n"; openssl_public_encrypt($data, $encrypted, file_get_contents(dirname(__FILE__).'/rsa_public_key.pem')); echo '公钥加密: '.base64_encode($encrypted)."\n"; $encrypted = base64_decode('nMD7Yrx37U5AZRpXukingESUNYiSUHWThekrmRA0oD0='); openssl_private_decrypt($encrypted, $decrypted, file_get_contents(dirname(__FILE__).'/rsa_private_key.pem')); echo '私钥解密: '.$decrypted."\n"; ?></code>