鍍金池/ 教程/ PHP/ 存儲密碼
驗(yàn)證郵件地址
自動加載類
PHP 與 MySQL
緩存 PHP opcode
檢測一個值是否為 null 或 false
PHP 標(biāo)簽
從性能角度來看單引號和雙引號
發(fā)送郵件
處理日期和時間
define() vs. const
配置 Web 服務(wù)器提供 PHP 服務(wù)
PHP 與 UTF-8
我們在使用哪個版本的 PHP?
凈化 HTML 輸入和輸出
PHP 與正則表達(dá)式
存儲密碼
PHP 與 Memcached

存儲密碼

使用 phpass 庫來哈希和比較密碼

經(jīng) phpass 0.3 測試,在存入數(shù)據(jù)庫之前進(jìn)行哈希保護(hù)用戶密碼的標(biāo)準(zhǔn)方式。 許多常用的哈希算法如 md5,甚至是 sha1 對于密碼存儲都是不安全的, 因?yàn)?a rel="nofollow" >駭客能夠使用那些算法輕而易舉地破解密碼。

對密碼進(jìn)行哈希最安全的方法是使用 bcrypt 算法。開源的 phpass 庫以一個易于使用的類來提供該功能。

示例

<?php
// Include phpass 庫
require_once('phpass-03/PasswordHash.php')

// 初始化散列器為不可移植(這樣更安全)
$hasher = new PasswordHash(8, false);

// 計算密碼的哈希值。$hashedPassword 是一個長度為 60 個字符的字符串.
$hashedPassword = $hasher->HashPassword('my super cool password');

// 你現(xiàn)在可以安全地將 $hashedPassword 保存到數(shù)據(jù)庫中!

// 通過比較用戶輸入內(nèi)容(產(chǎn)生的哈希值)和我們之前計算出的哈希值,來判斷用戶是否輸入了正確的密碼
$hasher->CheckPassword('the wrong password', $hashedPassword);  // false

$hasher->CheckPassword('my super cool password', $hashedPassword);  // true
?>

陷阱

許多資源可能推薦你在哈希之前對你的密碼“加鹽”。想法很好,但 phpass 在 HashPassword() 函數(shù)中已經(jīng)對你的密碼“加鹽”了,這意味著你不需要自己“加鹽”。

進(jìn)一步閱讀