首頁  >  文章  >  後端開發  >  求PHP7.1 加密函數mcrypt_module_open()替換方案

求PHP7.1 加密函數mcrypt_module_open()替換方案

WBOY
WBOY原創
2016-10-22 00:14:141734瀏覽

今天把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>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn