Ce que nous allons apprendre cette fois, c'est une autre extension de cryptage Hash. Cependant, cette extension Mhash a été intégrée à l'extension Hash. Dans le même temps, il convient de noter que cette extension n'est plus recommandée. Il convient d'utiliser directement les fonctions de l'extension Hash pour effectuer des opérations de chiffrement Hash. Par conséquent, nous comprenons encore aujourd’hui dans le but d’apprendre. Concernant le contenu de l’extension Hash, nous pouvons consulter l’article précédent : PHP Hash Information Summary Extension Framework.
Utilisation de la fonction de hachage cryptographique
$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
Comme le montre le code, l'utilisation de la fonction mhash() et hash() sont très similaires. leurs fonctions Même chose. Cependant, ce qui est chiffré par la fonction mhash() est directement binaire. Après avoir converti ce contenu en hexadécimal via bin2hex(), nous pouvons voir que la structure chiffrée par la fonction hash() ordinaire est exactement la même.
Lorsque vous effectuez le cryptage hmac, ajoutez simplement la clé directement au troisième paramètre.
Parcourez tous les types d'algorithmes pris en charge
Bien sûr, tout comme le cryptage Hash, le cryptage Mhash peut également choisir différents algorithmes. Nous pouvons également utiliser directement les fonctions pertinentes pour voir les algorithmes de cryptage pris en charge dans l'environnement actuel.
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 fournit également de nombreuses constantes pour représenter ces algorithmes, comme le MHASH_MD5 que nous avons utilisé dans le code précédent. En fait, ajoutez simplement MHASH_ devant le contenu que nous parcourons. La liste spécifique des constantes prises en charge se trouve dans le manuel officiel, nous ne la copierons donc pas et ne la collerons pas ici.
L'algorithme Salted S2K génère un résumé de mot de passe
De plus, Mhash nous fournit également un algorithme Salted S2K très pratique qui peut être utilisé pour générer facilement un ensemble très pratique de Le mot de passe crypte le contenu.
// OpenPGP 指定的 Salted S2K 算法 $hashPassword = mhash_keygen_s2k(MHASH_SHA1, '我的密码', random_bytes(2), 4); echo $hashPassword, PHP_EOL; echo bin2hex($hashPassword), PHP_EOL; // �-!= // 101ab899
Bien sûr, cet algorithme est également relativement sûr, avec un paramètre salt, et il peut spécifier la longueur des données renvoyées. Il renvoie également des données binaires. Si vous devez enregistrer du contenu texte standard, vous devez le convertir au format hexadécimal. Mais relativement parlant, je pense qu'il est plus sûr de générer directement du contenu binaire.
Résumé
Différentes fonctions ont différents scénarios d'application, mais en fait, Mhash n'a pas de scénarios d'application spéciaux. Après tout, les fonctions associées dans l'extension Hash sont entièrement capables. Il a remplacé sa fonction, il est plus riche et plus simple à utiliser. Si vous constatez l'utilisation de ces fonctions dans d'anciens projets, vous pouvez progressivement les remplacer par de nouvelles fonctions grâce à la reconstruction.
Code de test :
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
Apprentissage recommandé : Tutoriel vidéo php