PHP 使用 password_hash() 給密碼加密

PHP >= 5.5 時,能夠使用 password_hash() 和 password_verify() 來對用戶的密碼進行加密和驗證,例如在用戶註冊(加密存儲)和登錄(驗證):php

<?php

$password = '12345';
$options = [
    'cost' => 11, // 默認是10,用來指明算法遞歸的層數
		// mcrypt_create_iv — 從隨機源建立初始向量
		// @param 初始向量大小
		// @param 初始向量數據來源
		// 可選值有: MCRYPT_RAND (系統隨機數生成器), MCRYPT_DEV_RANDOM (從 /dev/random 文件讀取數據) 和 MCRYPT_DEV_URANDOM (從 /dev/urandom 文件讀取數據)。 在 Windows 平臺,PHP 5.3.0 以前的版本中,僅支持 MCRYPT_RAND。請注意,在 PHP 5.6.0 以前的版本中, 此參數的默認值爲 MCRYPT_DEV_RANDOM。
		// 生成一個長度爲22的隨機向量
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), 
];

// @param 用戶的密碼
// @param 一個用來在散列密碼時指示算法的密碼算法常量
// PASSWORD_DEFAULT 使用 bcrypt 算法 (PHP 5.5.0 默認),該常量會隨着 PHP 加入更新更高強度的算法而改變。 因此,使用此常量生成結果的長度將在將來有變化。 所以,數據庫裏儲存結果的列可超過60個字符(最好是255個字符)
// PASSWORD_BCRYPT 使用 CRYPT_BLOWFISH 算法建立哈希。 這會產生兼容使用 "$2y$" 的 crypt()。 結果將會是 60 個字符的字符串, 或者在失敗時返回 FALSE
// @param 一個包含有選項的關聯數組。目前支持兩個選項:salt,在散列密碼時加的鹽(干擾字符串),以及cost,用來指明算法遞歸的層數。省略後,將使用隨機鹽值與默認 cost。
$crypt = password_hash($password, PASSWORD_DEFAULT, $options);
// 或 $crypt = password_hash($password, PASSWORD_DEFAULT);
var_dump($crypt); // 長度60

var_dump(md5($password)); // 長度32

// 檢查密碼與散列值是否匹配
if(password_verify($password, $crypt)) {
	echo 'same';
}

說明:password_hash() 詳情見手冊:http://php.net/manual/zh/function.password-hash.php,它是 crypt() (見手冊:http://php.net/manual/zh/function.crypt.php)的一個簡單封裝。  算法

 

參考:數據庫

<PHP Cookbook>3'rd數組

相關文章
相關標籤/搜索