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"); 從代碼中可以看出,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; 在 PHP 中也提供了非常多的常量來代表這些算法,比如在前一段代碼中我們使用的 MHASH_MD5 。其實就是我們遍歷的這些內(nèi)容在前面加上 MHASH_ 就可以了。具體支持的常量列表我們可以在官方手冊中找到,在這里就不進行復(fù)制粘貼了。 Salted S2K 算法生成密碼摘要另外,Mhash 還為我們提供了一個非常方便的 Salted S2K 算法可以用來方便地生成一套非常方便地密碼加密內(nèi)容。 // OpenPGP 指定的 Salted S2K 算法 當(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 |
|
來自: 硬核項目經(jīng)理 > 《待分類》