PHP加密擴充庫—Mhash擴充庫
什麼是Mhash擴充庫:Mhash是基於離散數學原理的無法復原向的php加密方式擴充庫,其在預設情況下不開啟。mhash的可以用於建立校正數值,訊息摘要,訊息認證碼,以及無需原文的關鍵資訊儲存(如密碼)等。
1.Mhash擴充庫安裝
關於Mhash庫的安裝跟Mcrypt擴充庫安裝是類似的,在這裡就不做多介紹了,大家可以參考上一篇文章《PHP加密擴充庫—Mcrypt擴充庫》!
2.Mhash擴充庫常量
Mhash庫支援 MD5,SHA,CRC32等多種散列演算法,可以使用mhash_count()和mhash_get_hash_name()函數輸出支援的演算法名稱。下面一起看下範例程式碼:
<?phpheader("Content-Type:text/html; charset=utf-8");$num = mhash_count(); //函數返回最大的hash idecho "mhash庫支援的演算法有:<br>";for($i=0;$i<=$num;$i++){ echo $i."=>".mhash_get_hash_name($i)."<br>".""; //輸出每一個hash id 的名稱}?>
輸出結果為:
注意:如果在實際應用中使用上面的常量,需要在演算法名稱前面加上 MHASH_作為首碼,比如 CRC32 表示為 MHASH_CRC32。
3.Mhash應用
相對比 Mcrypt 擴充庫的 30 多個函數,Mhash庫中只有 5 個函數,除了上面使用到的兩個函數外,下面來介紹其他的 3 個函數。
(1)mhash_get_block_size()函數
函數文法格式如下:
int mhash_get_block_size ( int $hash )
該函數用來擷取參數 hash 的區塊大小,比如:mhash_get_biock_size(MHASH_CRC32)。
(2)mhash()函數
函數文法格式如下:
string mhash(int hash,string data[,string key])
該函數返回一個雜湊值。參數 hash 為要使用的演算法,參數data 是要加密的資料,參數key是加密使用的密鑰。
(3) mhash_keygen_s2k()函數
函數文法格式如下:
string mhash_keygen_s2k ( int $hash , string $password , string $salt, int $bytes )
該函數將根據參數password 和 salt 返回一個單位為位元組的 key值,參數 hash 為要使用的演算法。其中 salt 為一個固定 8 位元組的值,如果使用者給出的數值小與 8 位元組,將用 0 補齊。
下面執行個體中使用了 mhash_keygen_s2k()函數產生一個校正碼,並使用 bin2hex()函數將二進位結果轉換為十六進位。具體代碼如下:
<?phpheader("Content-Type:text/html; charset=utf-8");$filename = "08.txt"; // 檔案路徑$str = file_get_contents($filename); //讀取檔案內容到變數$str中$hash = 2 ; //設定hash值$password = "111"; //設定變數$password$salt = "1234"; //設定變數$salt$key = mhash_keygen_s2k(1,$password,$salt,10); //產生key 值$str_mhash =bin2hex(mhash($hash,$str,$key)); //使用$key 值、$hash值對字串$str 加密echo "檔案 08.txt 的校正碼是:".$str_mhash; //輸出校正碼?>
輸出的結果為;
【相關推薦】
1. 相關專題推薦:《PHP加密函數》
2.PHP加密擴充庫—Mcrypt擴充庫執行個體用法