Was wir dieses Mal lernen werden, ist eine weitere Hash-Verschlüsselungserweiterung. Allerdings wurde diese Erweiterung Mhash in die Hash-Erweiterung integriert. Gleichzeitig ist zu beachten, dass diese Erweiterung nicht mehr empfohlen wird. Wir sollten die Funktionen in der Hash-Erweiterung direkt verwenden, um Hash-Verschlüsselungsvorgänge durchzuführen. Deshalb verstehen wir es auch heute noch zum Zweck des Lernens. Bezüglich des Inhalts der Hash-Erweiterung können wir den vorherigen Artikel lesen: PHP Hash Information Summary Extension Framework.
Verwendung der kryptografischen Hash-Funktion
$hash = mhash(MHASH_MD5, "测试Mhash"); echo $hash, PHP_EOL; echo bin2hex($hash), PHP_EOL; // /�8�><�۠�P4q�j� // 2fcb38e93e3cc8dba09f503471846a9d $hash = hash('md5', "测试Mhash"); echo $hash, PHP_EOL; // 2fcb38e93e3cc8dba09f503471846a9d $hash = mhash(MHASH_MD5, "测试Mhash", 'hmac secret'); echo $hash, PHP_EOL; echo bin2hex($hash), PHP_EOL; // �k�<F�m �OM���� // b86bb83c46b76d09be4f4daf18ebfe85
Wie aus dem Code ersichtlich ist, sind die Funktionen mhash() und hash() natürlich auch sehr ähnlich. Was jedoch von der mhash()-Funktion verschlüsselt wird, ist direkt binär. Nachdem wir diesen Inhalt über bin2hex() in Hexadezimalzahlen umgewandelt haben, können wir sehen, dass die von der gewöhnlichen hash()-Funktion verschlüsselte Struktur genau dieselbe ist.
Bei der Durchführung der hmac-Verschlüsselung fügen Sie den Schlüssel einfach direkt zum dritten Parameter hinzu.
Durchlaufen Sie alle unterstützten Algorithmustypen
Natürlich kann auch die Mhash-Verschlüsselung genau wie die Hash-Verschlüsselung verschiedene Algorithmen auswählen. Wir können die entsprechenden Funktionen auch direkt verwenden, um die in der aktuellen Umgebung unterstützten Verschlüsselungsalgorithmen anzuzeigen.
echo mhash_count(), PHP_EOL; $nr = mhash_count(); // 33 for ($i = 0; $i <= $nr; $i++) { echo sprintf("Hash:%s,块大小为: %d\n", mhash_get_hash_name($i), mhash_get_block_size($i)); } // Hash:CRC32,块大小为: 4 // Hash:MD5,块大小为: 16 // Hash:SHA1,块大小为: 20 // Hash:HAVAL256,块大小为: 32 // Hash:,块大小为: 0 // Hash:RIPEMD160,块大小为: 20 // Hash:,块大小为: 0 // Hash:TIGER,块大小为: 24 // Hash:GOST,块大小为: 32 // Hash:CRC32B,块大小为: 4 // Hash:HAVAL224,块大小为: 28 // Hash:HAVAL192,块大小为: 24 // Hash:HAVAL160,块大小为: 20 // Hash:HAVAL128,块大小为: 16 // Hash:TIGER128,块大小为: 16 // Hash:TIGER160,块大小为: 20 // Hash:MD4,块大小为: 16 // Hash:SHA256,块大小为: 32 // Hash:ADLER32,块大小为: 4 // Hash:SHA224,块大小为: 28 // Hash:SHA512,块大小为: 64 // Hash:SHA384,块大小为: 48 // Hash:WHIRLPOOL,块大小为: 64 // Hash:RIPEMD128,块大小为: 16 // Hash:RIPEMD256,块大小为: 32 // Hash:RIPEMD320,块大小为: 40 // Hash:,块大小为: 0 // Hash:SNEFRU256,块大小为: 32 // Hash:MD2,块大小为: 16 // Hash:FNV132,块大小为: 4 // Hash:FNV1A32,块大小为: 4 // Hash:FNV164,块大小为: 8 // Hash:FNV1A64,块大小为: 8 // Hash:JOAAT,块大小为: 4
PHP bietet auch viele Konstanten zur Darstellung dieser Algorithmen, wie zum Beispiel MHASH_MD5, das wir im vorherigen Code verwendet haben. Fügen Sie einfach MHASH_ vor dem Inhalt hinzu, den wir durchlaufen. Die spezifische Liste der unterstützten Konstanten finden Sie im offiziellen Handbuch, daher werden wir sie hier nicht kopieren und einfügen.
Salted S2K-Algorithmus generiert Passwort-Digest
Darüber hinaus stellt uns Mhash auch einen sehr praktischen Salted S2K-Algorithmus zur Verfügung, mit dem sich ganz einfach ein sehr praktischer Satz passwortverschlüsselter Inhalte generieren lässt.
// OpenPGP 指定的 Salted S2K 算法 $hashPassword = mhash_keygen_s2k(MHASH_SHA1, '我的密码', random_bytes(2), 4); echo $hashPassword, PHP_EOL; echo bin2hex($hashPassword), PHP_EOL; // �-!= // 101ab899
Natürlich ist dieser Algorithmus auch relativ sicher, er verfügt über einen Salt-Parameter und kann die Länge der zurückgegebenen Daten angeben. Es gibt auch binäre Daten zurück. Wenn Sie Standardtextinhalte speichern müssen, müssen Sie diese in hexadezimale Form konvertieren. Aber relativ gesehen halte ich es für sicherer, binäre Inhalte direkt zu generieren.
Zusammenfassung
Verschiedene Funktionen haben unterschiedliche Anwendungsszenarien, aber tatsächlich gibt es für Mhash keine speziellen Anwendungsszenarien. Schließlich können die zugehörigen Funktionen in der Hash-Erweiterung seine Rolle vollständig ersetzen, und es ist umfangreicher und einfacher zu verwenden . Wenn Sie feststellen, dass diese Funktionen in alten Projekten verwendet werden, können Sie sie durch eine Rekonstruktion langsam durch neue Funktionen ersetzen.
Testcode:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84Mhash%E6%89%A9%E5%B1%95%E5%87%BD%E6%95%B0%E7%9A%84%E5%AD%A6%E4%B9%A0.php
Empfohlenes Lernen: php-Video-Tutorial