一、hash_hmac函數的概述
PHP中的hash_hmac函數是一種基於加密哈希算法的函數,用於計算消息的哈希值。它返回一個哈希值字符串,並且可以用於驗證消息的完整性和認證。
哈希是一種將任意長度的消息映射到固定長度的值的算法。哈希函數可以將任意大小的數據轉換為固定大小的唯一輸出值,這個輸出值通常稱為哈希值或摘要。通常情況下,消息的任何更改都會導致在哈希值上產生不可預測的變化。這使得哈希值非常適合用於數據完整性和身份驗證。
在hash_hmac函數中,使用一個密鑰對消息進行哈希。密鑰可以是任意長度,並且必須與使用相同密鑰的任何其他用戶共享。因此,hash_hmac函數可以用於生成消息身份驗證代碼,以便其他人可以驗證消息是否來自同一源。
二、hash_hmac函數的語法
hash_hmac函數的基本語法如下:
hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = FALSE ] ) : string
參數說明:
- algo:使用的哈希算法,例如“md5”、“sha256”等。
- data:要哈希的消息。
- key:密鑰(字符串)用於對消息進行哈希。
- raw_output:如果設置為TRUE,則返回原始二進制數據。否則,默認以十六進制字符串格式輸出。
三、實例演示
1. 對消息進行哈希
下面的示例演示如何對消息進行哈希:
// 使用SHA256算法進行哈希,並且不輸出原始二進制數據 $message = "Hello world"; $hash = hash_hmac("sha256", $message, "mysecretkey"); echo $hash;
輸出結果:
b1cd5d99bd0c85f3a2f5d0127d4bca7aeeedab1312e9f461feeeb4a773bc68f4
在本示例中,我們對”Hello world”這個消息使用了SHA-256哈希算法進行哈希。輸出結果為長度為64的十六進制字符串。
2. 對消息進行哈希並輸出原始數據
下面的示例演示如何對消息進行哈希,並輸出二進制原始數據:
// 使用HMAC-SHA1算法進行哈希,並輸出原始二進制數據 $message = "Hello world"; $hash = hash_hmac("sha1", $message, "mysecretkey", true); echo $hash;
輸出結果:
7b39d5ec177927c552f6405a9b79719e7d483b15
在本示例中,我們對”Hello world”這個消息使用了HMAC-SHA1哈希算法進行哈希,並使用了true參數輸出了原始的二進制數據。
3. 區分使用和不使用密鑰進行哈希的區別
下面的示例演示了僅使用哈希算法和使用密鑰進行哈希之間的差異:
// 僅對消息使用哈希算法 $message = "Hello world"; $hash1 = hash("sha256", $message); echo "Hash without key: " . $hash1 . "<br>"; // 使用HMAC-SHA256算法和密鑰哈希消息 $message = "Hello world"; $hash2 = hash_hmac("sha256", $message, "mysecretkey"); echo "Hash with key: " . $hash2;
輸出結果:
Hash without key: 916f0cebf8a4c8c09a4014c0d9fc1850bfe14f94c9315d4f09eea51f11d5263 Hash with key: b1cd5d99bd0c85f3a2f5d0127d4bca7aeeedab1312e9f461feeeb4a773bc68f4
在本示例中,我們在沒有密鑰的情況下使用了SHA256算法對”Hello world”這個消息進行哈希,並使用了相同的算法和密鑰對同一消息進行了哈希。注意兩者之間的差異,即使消息完全相同。
四、總結
在PHP中,hash_hmac函數提供了一種簡單但強大的方法來生成哈希值,並可用於驗證消息的完整性和身份認證。通過指定正確的哈希算法和密鑰,您可以使用此函數生成高度安全的哈希值,並在各種情況下使用它們。
原創文章,作者:AWICM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/332086.html