PHP – 雜湊演算法



“雜湊”一詞表示一種加密資料(特別是文字)以獲得固定長度值的技術。PHP 庫包含許多函式,可以透過應用不同的雜湊演算法(例如 md5、SHA2、HMAC 等)對資料執行雜湊操作。獲得的加密值稱為原始金鑰的雜湊值。

雜湊處理是一個單向過程,這意味著不可能反轉雜湊以獲得原始金鑰。

雜湊的應用

雜湊技術有效地用於以下目的:

密碼認證

我們經常註冊各種線上應用程式,例如 Gmail、Facebook 等。您需要填寫一個表單,在其中為線上帳戶建立密碼。伺服器會對您的密碼進行雜湊處理,並將雜湊值儲存在資料庫中。登入時,提交的密碼將被雜湊處理,並與資料庫中的密碼進行比較。這可以保護您的密碼不被竊取。

資料完整性

雜湊的一個重要用途是驗證資料是否未被篡改。當從網際網路下載檔案時,會顯示其雜湊值,您可以將其與下載的檔案進行比較,以確保檔案未被損壞。

雜湊的過程

雜湊過程可以用下圖表示:

PHP Hashing

PHP 中的雜湊演算法

PHP 支援多種雜湊演算法:

  • MD5 − MD5 是一種 128 位雜湊函式,廣泛用於軟體中以驗證傳輸檔案的完整性。128 位雜湊值通常表示為 32 位十六進位制數。例如,單詞“frog”始終生成雜湊值“8b1a9953c4611296a827abf8c47804d7”

  • SHA − SHA 代表安全雜湊演算法。它是美國國家標準與技術研究院 (NIST) 開發的一系列標準。SHA 是 MD5 的修改版本,用於對資料和證書進行雜湊處理。SHA-1 和 SHA-2 是該演算法的兩個不同版本。SHA-1 是一種 160 位雜湊演算法。SHA-2 實際上是一個雜湊“系列”,具有各種長度,最流行的是 256 位。

  • HMAC − HMAC(基於雜湊的訊息驗證碼)是一種加密認證技術,它使用雜湊函式和金鑰。

  • HKDF − HKDF 是一種基於 HMAC 訊息驗證碼的簡單金鑰派生函式 (KDF)。

  • PBKDF2 − PBKDF2(基於密碼的金鑰派生函式 2)是一種雜湊演算法,它根據密碼建立加密金鑰。

PHP 中的雜湊函式

PHP 庫包含多個雜湊函式:

hash_algos 函式

此函式返回一個包含支援的雜湊演算法列表的數字索引陣列。

hash_algos(): array

hash_file 函式

該函式返回一個字串,其中包含計算出的訊息摘要,以小寫十六進位制表示。

hash_file(
   string $algo,
   string $filename,
   bool $binary = false,
   array $options = []
): string|false

algo 引數是所選雜湊演算法的型別(即“md5”、“sha256”、“haval160,4”等)。filename 是描述要雜湊的檔案位置的 URL;支援 fopen 包裝器。

示例

請看下面的例子:

<?php
   /* Create a file to calculate hash of */
   $fp=fopen("Hello.txt", "w");
   $bytes = fputs($fp, "The quick brown fox jumped over the lazy dog.");
   fclose($fp);
   echo hash_file('md5', "Hello.txt");
?>

它將產生以下輸出

5c6ffbdd40d9556b73a21e63c3e0e904

hash() 函式

hash() 函式生成雜湊值(訊息摘要):

hash(
   string $algo,
   string $data,
   bool $binary = false,
   array $options = []
): string

algo 引數是所選雜湊演算法的型別(即“md5”、“sha256”、“haval160,4”等)。data 引數是要雜湊的訊息。如果 binary 引數為“true”,則輸出原始二進位制資料;“false”輸出小寫十六進位制數。

示例

該函式返回一個字串,其中包含計算出的訊息摘要,以小寫十六進位制表示。

<?php
   echo "Using SHA256 algorithm:" . hash('sha256', 'The quick brown fox jumped over the lazy dog.'). PHP_EOL;
   echo "Using MD5 algorithm:",hash('md5', 'The quick brown fox jumped over the lazy dog.'), PHP_EOL;
   echo "Using SHA1 algorithm:" . hash('sha1', 'The quick brown fox jumped over the lazy dog.');
?>

它將產生以下輸出

Using SHA256 algorithm:68b1282b91de2c054c36629cb8dd447f12f096d3e3c587978dc2248444633483
Using MD5 algorithm:5c6ffbdd40d9556b73a21e63c3e0e904
Using SHA1 algorithm:c0854fb9fb03c41cce3802cb0d220529e6eef94e
廣告