簡單介紹
Mhash是基於
離散數學原理的不可逆向的php加密方式擴展庫,其在默認情況下不開啟。mhash的可以用於創建校驗數值,訊息摘要,訊息認證碼,以及無需原文的關鍵信息保存(如密碼)等。
Mhash為PHP提供了多種哈希算法,如
MD5,
SHA1,
GOST 等。你可以通過
MHASH_hashname()來查看支持的算法有哪些。
注意問題:
1該擴展不能提供最新的哈希算法。
2.該擴展結果原則上運算不可逆。
安裝/配置
需求
Linux下,你必須到Mhash的官方網站 下載並且編譯代碼進行安裝。
windows下部php集合包已經默認打包了Mhash庫(非最新版本)你只需要通過配置開啟mhash的擴展。如果您沒有找到,請自行搜尋相關的
dll下載。
安裝
Linux: 您需要編譯代碼時候時候添加 -with mhash的[= DIR] 參數來啟用這個擴展。DIR是mhash的原始碼目錄。PHP 5.3.0,加入了mhash擴展模擬哈希擴展。這使得mhash的安裝目錄下有沒有效果,需要啟用哈希擴展mhash的支持。
安裝例子
gunzipmhash-x.x.x.tar.gz tar -xvfmhash-x.x.x.tar ./configure make make install cd ./configure -with-mhash=[dir] [--other-configuration-directives] make make install
|
運行phpinfo()你就可以看到mhash的擴展。
windows:
1把集合包中的dlls目錄下已編譯好的 libmhash.dll複製到 windows path變數下任意目錄或者apache(或者其他web伺服器)的安裝目錄下。
2.打開php.ini ,取消extension=php_mhash.dll 前面的註解
支持加密類型
Mhash擴展定義了下面的常量,他們代表了mhash的加密類型。如 MHASH_MD5 表示的是
MD5加密方式。
MHASH_ADLER32
MHASH_CRC32
MHASH_CRC32B
MHASH_GOST
MHASH_HAVAL128
MHASH_HAVAL160
MHASH_HAVAL192
MHASH_HAVAL224
MHASH_HAVAL256
MHASH_MD2
MHASH_MD4
MHASH_MD5
MHASH_RIPEMD128
MHASH_RIPEMD256
MHASH_RIPEMD320
MHASH_SHA1
MHASH_SHA192
MHASH_SHA224
MHASH_SHA256
MHASH_SHA384
MHASH_SHA512
MHASH_SNEFRU128
MHASH_SNEFRU256
MHASH_TIGER
MHASH_TIGER128
MHASH_TIGER160
MHASH_WHIRLPOOL
使用及例子
<?PHP $hash_alg = MHASH_TIGER; $message =' These are the directions to the secret fort. Two steps left, three steps right, and cha chacha.'; $hashed_message = mhash($hash_alg, $message); print The hashed message is . bin2hex($hashed_message); ?>
|
執行這一段腳本程式將得到下面的輸出結果:
The hashed message is 07a92a4db3a4177f19ec9034ae5400eb60d1a9fbb4ade461
在這裡使用bin2hex()函式的目的是方便我們理解$hashed_message 的輸出,這是因為混編的結果是二進制格式,為了能夠將它轉化為易於理解的格式,必須將它轉換為十六進制格式。
需要注意的是,混編是單向功能,其結果不依賴輸入。
Mhash還有其他一些有用的函式。例如,我們需要輸出一個Mhash支持的算法的名字,由於 Mhash支持的所有算法的名字都以MHASH_開頭,因此,可以通過執行如下的代碼完成這一任務:
<?PHP $hash_alg = MHASH_TIGER; print This data has been hashed with the.mhash_get_hash_name($hashed_message).hashing algorithm.; ?>
|
得到的輸出是:This data has been hashed with the TIGER hashing algorithm.
使用注意
不能保證不被監聽
PHP加密需要注意的一個重要問題是在伺服器和客戶端之間傳輸的數據在傳輸過程中是不安全的!(
http協定下)PHP是一種伺服器端技術,不能阻止數據在傳輸過程中泄密。因此,如果想實現一個完整的安全套用,建議選用 Apache-SSL或其他的安全伺服器。也就是我們要使用一些安全的傳輸協定,如
HTTPS原則上不能逆向
避免弱口令
hash加密方式雖然能保證密文不容易被黑客獲得原文,但不代表我們可以對弱口令漏洞鬆懈。在弱口令下,黑客可以很容易通過窮舉
彩虹表的方式迅速獲取原文。