2011-08-26 100 views
3
hash('sha512', $_POST['password'] . time()) 

我聽說過很多關於這個那個,不能得出一個結論的東西...這是足夠安全的,對散列

+1

除非您告訴我們有關如何使用計算出的哈希值的所有信息,否則談論安全性是不現實的。 – Jon

+0

只是一個簡單的登錄/註冊項目,我正在使用wamp,它是用戶登錄的密碼,我用時間戳 – carlgcoder

回答

4

您正在使用time()作爲salt。你可以做到這一點,但不要忘記存儲它(否則,你將如何能夠檢查給定的與salt串聯的密碼是否與存儲的哈希匹配?)。 sha512是散列算法的絕佳選擇。我建議

$salt = uniqid('carlgcoder_') . microtime(true); 
$hash = hash('sha512', $salt . $_POST['password']); 
+0

這是一個靜態的鹽和隨機的一起嗎?我想知道這件事,這會有好處嗎? – carlgcoder

+0

好吧,感謝您的幫助,我將堅持我所擁有的,並添加靜態鹽以及...將靜態鹽更好地存儲爲全局變量或實際哈希本身中,就像您的示例?? - – carlgcoder

+0

@carlgcoder這種鹽包含一個靜態部分和一個變量。 (時間不是隨機的)。動態部分使每個鹽都獨一無二 - 如果不同用戶的兩種鹽相同,攻擊者可以在一次運行中找到兩個密碼。此外,它還包含一個(不太重要的)靜態組件,以確保假設的攻擊者爲'microtime'和'uniqid'的所有可能值創建表將不得不爲您的項目定製他的表。 – phihag

5

我建議加一個salt創建和散列密碼時,其他那麼 - 是的。

+1

鹽是時間(),它存儲在數據庫中,因爲當用戶加入該網站,那麼每個用戶都是個人的。 – carlgcoder

+2

你如何檢查密碼是否匹配?你有那個時間存儲在某個地方嗎? –

+0

是的,我正在使用存儲在數據庫中的時間來計算帳戶的年齡,併爲用戶登錄。 – carlgcoder

0

使用鹽。示例:

<?php 
    $passwordWasSavedInDB = md5($_POST['password']."_paranoia_") 
+0

...但最好不要使用相同的鹽來處理所有事情,而sha512更好比md5,那麼原始海報有什麼比你的回答更好 –

+0

他*是*使用鹽,它比你提出的常量字符串更好。另外,爲什麼在世界上你會比SHA512更喜歡MD5? – phihag

+0

從不使用靜態鹽 - 使用從用戶的其他信息創建的東西。 – ty812