2014-04-11 20 views
-1

散列是更安全的存儲密碼用:密碼的安全性連連或者僅僅是一個時間

$password=hash(sha512, $_POST['password']); 
$password=hash(sha512, $password); 
$password=hash(sha256, $password); 
$password=md5('JIOA#324FKJ///#dfr3inj1HJ4_jbbf-vbd31ds4_-_nURl//\&[email protected]@drgko489d', $password); 
$password=hash(sha512, $password); 

這一切會是不僅僅是安全:

$password=hash(sha512, $_POST['password']); 
+0

看看這個:http://programmers.stackexchange.com/questions/115406/is-it-more-secure-to-hash-a-password-multiple-times – Philibobby

+0

您應該使用鹽與你的哈希,而不是一個原始的散列。 – WinterMute

+0

第四步似乎是一個特別糟糕的主意,因爲md5是不安全的。重複哈希的唯一真正原因是減慢速度,所以暴力攻擊需要更長的時間。爲此,您需要重複一次像sha256這樣的快速哈希數千次。 – towr

回答

1

沒有,因爲 - 正如towr指出的那樣 - 第一次返回相同的$password每次這顯然不是你想要的。第二個是用於實際的意圖與以明文方式保存密碼一樣糟糕。有大量的在線數據庫,您可以在其中查找特定散列的密碼。如果我們看看第一個代碼打算做什麼(我想md5步驟是爲了連接兩個字符串),那麼更好,因爲它使用md5步驟中的字符串作爲鹽。鹽雖然是靜態的,所以它仍然是一個非常糟糕的密碼散列方案。您可能需要閱讀password hashing basics

在我會建議你遵循ceejayoz的建議,並使用PHP 5.5的password_hash功能的情況下。

0

無建議的散列方案的適合散列密碼,因爲他們是所有方式太快。您需要像BCrypt或PBKDF2這樣的慢密鑰派生函數,並具有可適應的成本因素。

PHP提供了新的功能password_hash計算BCrypt哈希值。它簡化了所有棘手的事情,例如生成安全的鹽。對於早期的PHP版本,您可以使用compatibility pack

// Hash a new password for storing in the database. 
// The function automatically generates a cryptographically safe salt. 
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT); 

// Check if the hash of the entered login password, matches the stored hash. 
// The salt and the cost factor will be extracted from $existingHashFromDb. 
$isPasswordCorrect = password_verify($password, $existingHashFromDb); 
相關問題