Heim  >  Artikel  >  Backend-Entwicklung  >  Auf der Suche nach einem Ersatz für die PHP7.1-Verschlüsselungsfunktion mcrypt_module_open()

Auf der Suche nach einem Ersatz für die PHP7.1-Verschlüsselungsfunktion mcrypt_module_open()

WBOY
WBOYOriginal
2016-10-22 00:14:141732Durchsuche

Ich habe heute PHP auf 7.1 aktualisiert und festgestellt, dass die Verwendung dieser Funktion nicht empfohlen wird:
mcrypt_module_open() ist veraltet

Gibt es andere Möglichkeiten, es zu ersetzen?

=============================

Da 7.1 noch nicht offiziell veröffentlicht wurde und im Release-Dokument von 7.1 angegeben ist, dass die Verwendung von Erweiterungen wie mcrypt in Zukunft nicht empfohlen wird, gibt es derzeit keine Lösung für dieses Problem. Sollten Studierende auf das gleiche Problem stoßen, verwenden Sie bitte Version 5 oder 7.0.

Antwortinhalt:

Ich habe heute PHP auf 7.1 aktualisiert und festgestellt, dass die Verwendung dieser Funktion nicht empfohlen wird:
mcrypt_module_open() ist veraltet

Gibt es andere Möglichkeiten, es zu ersetzen?

=============================

Da 7.1 noch nicht offiziell veröffentlicht wurde und im Release-Dokument von 7.1 angegeben ist, dass die Verwendung von Erweiterungen wie mcrypt in Zukunft nicht empfohlen wird, gibt es derzeit keine Lösung für dieses Problem. Sollten Studierende auf das gleiche Problem stoßen, verwenden Sie bitte Version 5 oder 7.0.

Ich stimme der Aussage von @eechen überhaupt nicht zu, der sagte, dass es im Handbuch nicht erwähnt wird! ?

http://php.net/manual/zh/migr...

Zitat des Originaltextes des Handbuchs:

<code>mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。</code>

In PHP 7.1 kann die Mycrypt-Erweiterung auch im PHP-Installationspaket gefunden und verwendet werden. Sie wird in PHP 7.2 entfernt, aber wir können weiterhin den Quellcode von PECL herunterladen, diese Erweiterung kompilieren und installieren.

Es ist jedoch am besten, den Vorschlägen von PHP zu folgen und die Rolle von mcrypt schrittweise durch OpenSSL zu ersetzen.

Asymmetrische Verschlüsselung kann verwendet werden! Verschlüsselung mit öffentlichem Schlüssel, Entschlüsselung mit privatem Schlüssel.

Die mcrypt-Erweiterung ist in 7.1 veraltet und wird in 7.2 von integriert nach PECL verschoben.

Wenn Sie volle Kompatibilität benötigen, können Sie die veraltete Version nur ignorieren und verwenden.
Wenn Sie nur einen Ersatz mit ähnlichen Funktionen benötigen, lautet die offizielle Empfehlung, die OpenSSL-Erweiterung zu verwenden.

Einzelheiten finden Sie im offiziellen Handbuch.

Aber es gibt keine deprecatedWarnung im Handbuch, daher gibt es keine Erklärung der Alternative
Und wenn ich PHP 7.0 verwende, gibt es keine solche Warnung, dass es nicht empfohlen wird
Schließlich. Es handelt sich um die Version 7.1, die Sie erwähnt haben. Sie ist noch nicht offiziell veröffentlicht, Sie können sie als Fehler behandeln.

Ergänzung:
Vielen Dank für die Erinnerung. Das PHP-Handbuch bietet auf der 7.1-Migrationsseite eine Alternative, nämlich die Verwendung von OpenSSL als Ersatz für MCrypt.
Sehen wir uns die Verwendung von OpenSSL zur Implementierung der symmetrischen Verschlüsselung AES an und asymmetrische Verschlüsselung 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>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn