Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie die Sodium-Verschlüsselungserweiterungsfunktion in PHP

So verwenden Sie die Sodium-Verschlüsselungserweiterungsfunktion in PHP

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-06-17 17:28:312427Durchsuche

In diesem Artikel erfahren Sie, wie Sie die Sodium-Verschlüsselungserweiterungsfunktion in PHP verwenden. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

So verwenden Sie die Sodium-Verschlüsselungserweiterungsfunktion in PHP

Die Sodium-Verschlüsselungserweiterungsfunktion von PHP verstehen

Dies ist der letzte Artikel in dieser Verschlüsselungserweiterungsreihe und es ist auch die letzte PHP-Verschlüsselungserweiterung, über die wir mehr erfahren möchten. Der Zweck der Entstehung von Sodium besteht auch darin, Mcrypt, die ursprüngliche Verschlüsselungserweiterung, zu ersetzen. Mcrypt wurde seit PHP7.2 entfernt und in PHP7.1 als veraltet markiert. Es gibt jedoch nicht viele Anwendungen der Sodium-Erweiterung. In den meisten Fällen verwenden wir OpenSSL, um Verschlüsselungsvorgänge durchzuführen. Gleichzeitig bietet die Sodium-Erweiterung viele Funktionen, daher werden wir sie in diesem Artikel nur verstehen. Das Wichtigste ist natürlich, dass selbst die offizielle Dokumentation zu dieser Erweiterung nicht vollständig ist. Für die meisten Funktionen gibt es keine Parameterbeschreibungen und durch Suchen werden nur sehr wenige Informationen gefunden.

Die Sodium-Erweiterung wurde mit dem PHP-Quellcode nach PHP7.2 veröffentlicht. Sie müssen beim Kompilieren nur --with-sodium hinzufügen, um sie erfolgreich zu installieren. Wenn es sich um eine Version vor PHP7.2 handelt, müssen Sie diese Erweiterung separat installieren. Gleichzeitig muss auch die Bibliothek libsodium-devel im Betriebssystem installiert werden.

AEAD_AES_256_GCM-Verschlüsselung und -Entschlüsselung

Das erste ist die Anwendung dieser AEAD_AES_256_GCM-Verschlüsselungs- und Entschlüsselungsfunktion. In der WeChat-Zahlungsentwicklung gibt es eine Schnittstelle, die diese Methode zum Verschlüsseln von Daten verwendet. In der offiziellen Dokumentation wird auch die entsprechende Entschlüsselungsmethode für PHP bereitgestellt, die die Funktion in der Sodium-Erweiterungsbibliothek verwendet. (Siehe den zweiten Link im Referenzdokument am Ende des Artikels)

$data = '测试加密'; // 原始数据
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES); // 加密证书的随机串,加密证书的随机串
$ad = 'fullstackpm'; // 加密证书的随机串
$kengen = sodium_crypto_aead_aes256gcm_keygen(); // 密钥

// 是否可用
echo sodium_crypto_aead_aes256gcm_is_available(), PHP_EOL; // 1

// 加密
$pem = sodium_crypto_aead_aes256gcm_encrypt($data, $ad, $nonce, $kengen);
var_dump($pem);
// string(28) "��VRw!�����f��l�O�tV=\x�"

// 解密
$v = sodium_crypto_aead_aes256gcm_decrypt($pem, $ad, $nonce, $kengen);
var_dump($v);
// string(12) "测试加密"

In den Kommentaren im Code sind die relevanten Funktionen und Parameter detailliert beschrieben. Wenn Sie dies zum Entschlüsseln in WeChat verwenden, werden alle Anzeigen, Schlüssel, Nonce usw. von WeChat bereitgestellt. Zur Veranschaulichung hier: Es handelt sich bei allen um selbst generierte Inhalte.

sodium_crypto_aead_aes256gcm_encrypt() Der durch die Verschlüsselung generierte Inhalt ist ebenfalls binärer Inhalt, es handelt sich also um eine relativ sichere Form der Verschlüsselung.

Nachrichtensignatur

Die Sodium-Erweiterungsbibliothek bietet uns auch die Funktion, zu überprüfen, ob die Daten manipuliert wurden, d. h. die Möglichkeit, einen Signaturvergleich von Informationen durchzuführen.

// 信息签名
$key = sodium_crypto_auth_keygen(); // 生成随机签名密钥
$message = '测试认证签名';

// 生成签名
$signature = sodium_crypto_auth($message, $key);
var_dump($signature);
// string(32) "�B�
//                9���l�wn�x���ӛc�ܙ�u^j��"

// 验证签名
var_dump(sodium_crypto_auth_verify($signature, $message, $key));
// bool(true)

Sie benötigen lediglich einen einfachen zufälligen Signaturschlüssel und vergleichen dann den Signatur-Digest mit dem Originaltext, um festzustellen, ob die Daten während der Übertragung manipuliert wurden.

Hash

Ja, Sie haben richtig gelesen, die Sodium-Erweiterung bietet uns auch eine Reihe von Hash-Verschlüsselungsfunktionen. Die Verwendung ist jedoch etwas komplizierter und der generierte Inhalt ähnelt in gewisser Weise dem Inhalt, der von einem Passwort-Hashing-Algorithmus generiert wird. Wir empfehlen jedoch weiterhin, „password_hash()“ im Passwort-Hash-Algorithmus zu verwenden, um diese Art von Hash-Passwort zu generieren.

// Hash
$password = '测试Hash';
$hash = sodium_crypto_pwhash_str(
    $password,
    SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, // 最大计算量
    SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE // 最大RAM量
);
var_dump($hash);
// string(97) "$argon2id$v=19$m=65536,t=2,p=1$VFfdNV4W0MFwLiLPdr9i6g$QDmd5sQToZANYTVEkPVTbPvbY7tuf1ALKU3IXrF44R0"

// 验证 Hash 信息
var_dump(sodium_crypto_pwhash_str_verify($hash, $password));
// bool(true)

Zusammenfassung

Obwohl wir normalerweise nicht damit in Berührung kommen, hat die Sodium-Erweiterung praktische Anwendungen in der Entwicklung. Da WeChat diese Verschlüsselungsmethode für die Datenverschlüsselung verwendet, sollten wir auch ein tieferes Verständnis dafür haben . Wir hoffen jedoch weiterhin, dass der Beamte die Dokumentation so schnell wie möglich verbessern kann, da wir sonst nicht in der Lage sein werden, den Inhalt dieser Erweiterungsreihe systematisch zu lernen.

Testcode:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202008/source/PHP%E7%9A%84Sodium%E5%8A%A0%E5%AF%86%E6%89%A9%E5%B1%95%E5%87%BD%E6%95%B0%E4%BA%86%E8%A7%A3.php

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Sodium-Verschlüsselungserweiterungsfunktion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen