簡體   English   中英

PHP:這個密碼加密安全嗎?

[英]PHP: is this password encryption secure?

我發現這個例子是如何使用PHP散列和檢查密碼。 這樣安全嗎? 這是一個很好的例子嗎?

public function hashPassword($mail, $password, $salt, $rounds='08')
{
   $length = strlen($password) * 4;
   $data = str_pad($password, $length, sha1($mail), STR_PAD_BOTH);
   $string = hash_hmac('whirlpool', $data, SERVER_KEY, true);

   return crypt($string, '$2a$' . $rounds . '$' . $salt);
}

public static function checkPassword($mail, $password, $stored)
{
   $length = strlen($password) * 4;
   $data = str_pad($password, $length, sha1($mail), STR_PAD_BOTH);
   $string = hash_hmac ('whirlpool', $data, SERVER_KEY, true);

   return (crypt($string, substr($stored, 0, 30)) === $stored);
}

除了你使用$2a$而不是$2y$之外,哈希算法看起來很好。 crypt()手冊頁

僅針對PHP 5.3.7及更高版本的開發人員應使用“$ 2y $”優先於“$ 2a $”

此外,使用08作為成本參數非常弱,除非您使用的是非常舊的硬件。 您希望盡可能長時間地進行哈希處理而不會給用戶帶來不便。 通常250毫秒是可以接受的。 在我的桌面PC上(這不是那么現代)這相當於11 ,所以對於一個體面的服務器,你可能至少需要這么多。 嘗試使用該參數,直到你得到一個數字來計算/驗證哈希並使用它。

另一個相當大的問題是你如何產生鹽,但由於我們沒有看到你如何做到這一點,所以沒有太多的可以批評。

盡管如此,到目前為止,最好的做法是忘記制作家釀密碼哈希算法,而是使用PHP內置的password_hash()函數。 (對於PHP <5.5,您可以從github下載兼容包)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM