PHP 非對稱加密函數password_hash() 替代Md5()


$hashed_password = password_hash('mypassword',PASSWORD_BCRYPT);
var_dump(password_verify ('mypassword', $hashed_password.''));
#結果true

我們一般習慣性的使用MD5方法進行用戶密碼的加密處理,但是常見的Md5方法非常容易被一些大型解密網站破解;
PHP提供了 'password_hash()' 函數可以生產更加安全的密碼;
password_hash一共支持三個參數的傳入

password_hash ( string $password , int $algo [, array $options ] )

 1:用戶的明文密碼;

2:加密算法 (PASSWORD_DEFAULT PASSWORD_BCRYPT PASSWORD_ARGON2I);


        PASSWORD_BCRYPT 支持的選項:

 1. salt(string) - 手動提供散列密碼的鹽值(salt)。這將避免自動生成鹽值(salt)。
      省略此值后,password_hash() 會為每個密碼散列自動生成隨機的鹽值。這種操作是有意的模式。
      鹽值(salt)選項從 PHP 7.0.0 開始被廢棄(deprecated)了。 現在最好選擇簡單的使用默認產生的鹽值。
2. cost (integer) - 代表算法使用的 cost。 省略時,默認值是 10。 這個 cost 是個不錯的底線,但也許可以根據自己硬件的情況,加大這個值

 

        PASSWORD_ARGON2I 支持的選項:

    memory_cost (integer) - 計算 Argon2 散列時的最大內存(單位:字節 byte)。默認值: PASSWORD_ARGON2_DEFAULT_MEMORY_COST。
    time_cost (integer) - 計算 Argon2 散列時最多的時間。默認值: PASSWORD_ARGON2_DEFAULT_TIME_COST。
    threads (integer) - 計算 Argon2 散列時最多的線程數。默認值: PASSWORD_ARGON2_DEFAULT_THREADS。

 

3.一個包含有選項的關聯數組 目前支持兩個選項:salt (鹽值) cost(用來指明算法遞歸的層數);

返回值:
返回散列后的密碼,失敗的時候返回False;
其中返回的密碼中包含了使用的(算法 cost 鹽值) 所以我們可以不用存儲鹽值和算法的信息;
使用password_verify()可以直接進行驗證;

 

使用案例:

$options = [
  'cost' => 11,
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
 ];
password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
輸出:$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.

驗證散列是否和密碼匹配 password_verify()
bool password_verify ( string $password , string $hash )
參數1:傳入用戶密碼 參數2:傳入用戶的哈希值

案例:

$hashed_password = password_hash('mypassword',PASSWORD_BCRYPT);
var_dump(password_verify ('mypassword', $hashed_password.''));

 

PHP官網解釋:http://php.net/manual/zh/faq.passwords.php

      http://php.net/manual/zh/function.password-hash.php



 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM