2014-01-08 121 views
-1

我有以下代碼:(只用於加密/哈希測試文件)鹽+ SHA512 + MD5加密

<!doctype html> 
<html> 
<head></head> 
<body> 

    <?php 

    error_reporting('off'); 

    if (isset($_POST['submit'])) { 
     $salt = "[email protected]<^$"; 
     $hash = hash("sha512", $_POST['hash']); 
     $hash = $salt . $hash; 
     $hash = md5($hash); 
     echo $hash; 
     $hashLen = strlen($hash); 
     echo "<br>The length of the hashed word is " . $hashLen . " characters long!"; 
    } 

    ?> 

    <form action="hashed.php" method="post"> 
     <input type="text" name="hash"> 
     <input type="submit" value="Hash" name="submit"> 
    </form> 

</body> 
</html> 

安全性如何呢? 我知道這很可能會被黑客入侵,但需要多長時間? 我目前正在製作一個php/mysqli註冊表單,並希望儘可能使用戶的密碼安全,這樣黑客需要很長時間才能破解用戶的密碼。要加密更多,我可以使用這個例如:

用sha512,md5(md5),添加不同的鹽,另外兩個sha512,另一個md5和另一個不同的鹽散列它!

聽起來有多安全?黑客需要多長時間才能破解密碼? 請你可以建議我使用非常非常安全的加密方法。另外,我想讓用戶使用cookie登錄:需要一種安全的方式將他們的信息存儲在cookie中!

在此先感謝:)

+1

增加複雜性!=提高安全性。對所有密碼使用相同的鹽是完全不安全的。 [password_hash()](http://us1.php.net/manual/en/function.password-hash.php)是安全的,並且具有嵌入的安全鹽。 –

回答

9

這是不安全的。它類似於Dave's home brew hash/kinda stupid algorithm,答案解釋了它的錯誤。就你而言,我只是說你只使用非常快的散列進行2次計算,而這遠遠不足以擊敗基於GPU的破解。

此外,你應該never roll your own cryptography,當然也適用於散列函數。相反,使用標準和完善的測試password hashing functions來與PHP:

$password = "HelloStackOverflow"; // example password 

$hash = password_hash($password, PASSWORD_BCRYPT); // here's the hash of the previous password 

// you can set the "complexity" of the hashing algorithm, it uses more CPU power 
// but it'll be harder to crack, even though the default is already good enough 

$hash = password_hash($password, PASSWORD_BCRYPT, ["cost" => 10]); 

if (password_verify($password, $hash)) { // checking if a password is valid 
    echo "Welcome back !"; // valid password 
} else { 
    echo "You're not the one you're pretending to be..."; // invalid password 
} 

如果你的PHP安裝太舊(< 5.5)和不具備password_*功能,您可以使用this library它提供了與前向兼容性這些職能;用法與上面的示例保持一致。

1

我目前做一個PHP/mysqli的登記表,並希望使用戶的密碼作爲安全的,因爲我可以,所以,它將採取黑客很長的時間來破解用戶的密碼之一

好吧,對於一個好的密碼存儲系統(以及它們所抵禦的威脅)的元素,請參閱約翰史蒂文爲OWASP寫的Secure Password Storage Cheat SheetSecure Password Storage paper。它會引導您完成整個威脅模型,並解釋爲什麼事情以特定方式完成。

使用sha512,md5(md5)加入一個不同的鹽,再添加兩個sha512,另一個md5和另一個不同的鹽! ... 這有多安全?

那麼,有標準和可接受的做事方式,然後有沒有標準的做事方式。我認爲你的計劃落後於後者。

也許這是一個好主意,使用被廣泛接受的東西。

黑客破解密碼需要多長時間?

裂紋不是這裏唯一的威脅。更可能的是,試圖闖入你的組織的人將會使用從Adobe違規,LinkedIn違規,Last.fm違規,<這裏最喜歡的>違規收集的數百萬密碼中的一個頂級密碼。 ...例如:

何苦蠻力,當你有幾千最受好評的密碼列表強制s使用?

所以你的FIRST最好的防禦措施是使用一個單詞列表來過濾用戶的錯誤密碼選擇。也就是說,不要讓用戶首先選擇弱或已知的密碼。

如果有人忘記了您的密碼數據庫,那麼他或她將使用這些相同的密碼列表來嘗試猜測您的用戶密碼。他或她可能甚至不會打擾暴力強制,因爲他或她會使用密碼列表恢復如此多的密碼。

據我所知,這些單詞列表實現爲Bloom Filter時非常小。即使有數百萬個密碼,它們的大小也只有KB。請參閱Peter Gutmann的Engineering Security進行深入討論。