天天看點

CI架構 -- 密碼哈希

雜湊演算法是一個單向函數。它可以将任何大小的資料轉化為定長的“指紋”,并且無法被反向計算

依賴性

crypt() 函數需支援 CRYPT_BLOWFISH

常量

PASSWORD_BCRYPT

PASSWORD_DEFAULT

函數

1、string  password_hash($password, $algo[, $options = array()])

參數:

$password:密碼

$algo:雜湊演算法

$options:選項

功能:将一段密碼$password,通過雜湊演算法,将其轉換成一段複雜的哈希值字元串

$pwd = "123456";
$hash = password_hash($pwd, PASSWORD_DEFAULT);
echo $hash;      

輸出類似:$2y$10$yA/6ibVYdlQ2NcgeQguDSen6zYealETVXa.g227EsHvlK2RI6etYi

且重新整理頁面該哈希值也會不斷的變化

2、bool password_verify($password, $hash)

$hash:哈希值

功能:校驗密碼是否和哈希值比對

$pwd = "123456";
 $hash_pwd = password_hash($pwd,PASSWORD_DEFAULT);
 $verify = password_verify($pwd, $hash_pwd);
 var_dump($verify);      

結果:如果該哈希值$hash_pwd是由$pwd通過password_hash函數生成的,那麼由password_verify函數來校檢的話,傳回的是TRUE;相反,則生成FALSE

3、boolean password_needs_rehash ( string 

$hash

 , integer 

$algo

 [, array 

$options

 ] )

功能:檢驗該$hash是否還需要進行哈希轉換。如果,$hash是已經經過password_hash函數轉換生成的結果,則不需要再進行哈希轉換,password_needs_rehash函數傳回FALSE;相反,傳回TRUE

$pwd = "123456";
 $hash_pwd = password_hash($pwd,PASSWORD_DEFAULT);
 $needrehash1 = password_needs_rehash($pwd,PASSWORD_DEFAULT);      //需要進行哈希轉換,傳回TRUE
 $needrehash2 = password_needs_rehash($hash_pwd ,PASSWORD_BCRYPT);   //不需要再進行哈希轉換,傳回FALSE
 var_dump($needrehash);      

4、array  password_get_info($hash)

$hash:一個由password_hash函數建立的散列值(哈希值)。

功能:傳回有關哈希數組資訊

$pwd = "123456";
 $hash_pwd = password_hash($pwd,PASSWORD_DEFAULT);
 $hashinfo = password_get_info($hash_pwd);
 var_dump($hashinfo);      

例:

CI架構 -- 密碼哈希