乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      PHP的Mhash擴展函數(shù)的學(xué)習(xí)

       硬核項目經(jīng)理 2021-05-31

      PHP的Mhash擴展函數(shù)的學(xué)習(xí)

      這次我們要學(xué)習(xí)的又是一個 Hash 加密擴展。不過這個擴展 Mhash 已經(jīng)集成在了 Hash 擴展中。同時也需要注意的是,這個擴展已經(jīng)不推薦使用了,我們應(yīng)該直接使用 Hash 擴展中的函數(shù)來進行 Hash 加密操作。所以,我們今天仍然是以學(xué)習(xí)為目的的進行了解。關(guān)于 Hash 擴展的內(nèi)容,我們可以查看之前的文章:PHP的Hash信息摘要擴展框架 。

      加密散列函數(shù)的使用

      $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

      從代碼中可以看出,mhash() 函數(shù)和 hash() 的使用非常像,當(dāng)然,他們的作用也是一樣的。不過,mhash() 函數(shù)加密出來的直接是二進制的,我們將這個內(nèi)容通過 bin2hex() 轉(zhuǎn)成 16 進制之后就可以看到和普通的 hash() 函數(shù)加密的結(jié)構(gòu)是完全相同的了。

      在進行 hmac 加密的時候直接在第三個參數(shù)上添加 key 就可以了。

      遍歷所有支持的算法類型

      當(dāng)然,就像 Hash 加密一樣,Mhash 加密也是可以選擇不同的算法的。我們也是直接使用相關(guān)的函數(shù)就可以看到當(dāng)前環(huán)境中所支持的加密算法。

      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 中也提供了非常多的常量來代表這些算法,比如在前一段代碼中我們使用的 MHASH_MD5 。其實就是我們遍歷的這些內(nèi)容在前面加上 MHASH_ 就可以了。具體支持的常量列表我們可以在官方手冊中找到,在這里就不進行復(fù)制粘貼了。

      Salted S2K 算法生成密碼摘要

      另外,Mhash 還為我們提供了一個非常方便的 Salted S2K 算法可以用來方便地生成一套非常方便地密碼加密內(nèi)容。

      // OpenPGP 指定的 Salted S2K 算法
      $hashPassword = mhash_keygen_s2k(MHASH_SHA1, '我的密碼', random_bytes(2), 4);
      echo $hashPassword, PHP_EOL;
      echo bin2hex($hashPassword), PHP_EOL;
      // ?-!=
      // 101ab899

      當(dāng)然,這個算法也是比較安全的,有 salt 參數(shù),并且它可以指定返回的數(shù)據(jù)長度。它返回的也是二進制的數(shù)據(jù),如果需要保存標準的文本內(nèi)容也需要將其轉(zhuǎn)化為 16 進制的形式。不過相對來說,我反而覺得這種直接生成二進制內(nèi)容的還更安全一些。

      總結(jié)

      不同的函數(shù)有不同的應(yīng)用場景,但其實 Mhash 已經(jīng)沒有什么特別的應(yīng)用場景了,畢竟 Hash 擴展中的相關(guān)函數(shù)已經(jīng)完全能夠替代它的作用了,而且還更加的豐富易用。大家如果在老的項目中見到這些函數(shù)的使用,也完全可以慢慢的通過重構(gòu)替換到新的函數(shù)。

      測試代碼:

      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

      參考文檔:

      https://www./manual/zh/book.mhash.php

        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章