當前位置: 首頁> 最新文章列表> 使用crypt() 的SHA-256 和SHA-512 算法($5$ 和$6$)

使用crypt() 的SHA-256 和SHA-512 算法($5$ 和$6$)

M66 2025-05-31

在PHP 中, crypt()函數是一個強大的密碼加密工具,它支持多種加密算法,其中包括基於SHA-256 和SHA-512 的哈希加密方式。這兩種算法在crypt()函數中分別以$5$$6$為前綴來區分。本文將詳細講解如何使用這兩種方式對密碼進行加密,並提供相應的示例代碼。

crypt() 函數簡介

crypt()是PHP 中用於單向加密的函數,通常用於密碼的哈希處理。在使用時,你可以通過指定“salt(鹽值)”來控制加密算法和加密結果。

 string crypt(string $string, string $salt)
  • $string :需要加密的原始字符串。

  • $salt :加密算法及其配置,格式因算法不同而異。

SHA-256 加密($5$)

SHA-256 是一種常用的加密哈希函數,其在crypt()函數中通過$5$前綴啟用。你可以選擇性地添加“輪數”(rounds)和自定義的鹽值。

 $password = 'mypassword';
$salt = '$5$rounds=5000$mysaltvalue$';
$hash = crypt($password, $salt);
echo $hash;

說明:

  • $5$指定使用SHA-256。

  • rounds=5000設置加密輪數(可選)。

  • mysaltvalue是鹽值字符串,可以自定義。

  • 加密結果將以$5$開頭,便於識別。

示例輸出可能為:

 $5$rounds=5000$mysaltvalue$5O2dlyLbMFx.kPQzMt4HZG4lDHzs9DGx85xuRSkjRA/

SHA-512 加密($6$)

類似地,SHA-512 也可以通過crypt()實現,只需將前綴改為$6$

 $password = 'mypassword';
$salt = '$6$rounds=10000$customsalt$';
$hash = crypt($password, $salt);
echo $hash;

說明:

  • $6$啟用SHA-512 加密。

  • rounds=10000說明進行10000 次加密迭代。

  • customsalt是你的鹽值。

示例輸出可能為:

 $6$rounds=10000$customsalt$WXnQmvLQu.wNcB3VJmfYB/mURR3p8ddmdvYqTbWn1l6gBBR4vlmMHI8LtkYmK5I24T2MGk7pDODDZAxU2ueCd0

生成隨機鹽值

為了安全性,鹽值應當盡量隨機。以下是一個生成鹽值的簡單函數:

 function generateSalt($length = 16) {
    return bin2hex(random_bytes($length / 2));
}

$password = 'mypassword';
$salt = '$6$rounds=10000$' . generateSalt() . '$';
$hash = crypt($password, $salt);
echo $hash;

應用場景與安全提示

  1. 用戶密碼存儲:不建議將用戶密碼以明文形式保存,使用crypt()配合安全鹽值和合適輪數是一種安全的方式。

  2. 比較密碼:在驗證密碼時,應使用相同的鹽值重新加密用戶輸入,然後與存儲的哈希值進行對比。

  3. HTTPS 傳輸:確保加密數據通過https://m66.net之類的安全協議進行傳輸,避免中間人攻擊。

小結

通過本文的介紹,你可以使用PHP 的crypt()函數結合$5$$6$實現基於SHA-256 和SHA-512 的安全加密。這種方式適用於登錄認證、用戶信息保護等多個場景。結合強鹽值策略和高輪數設定,能大大提升數據的安全性。