SHA1 vs md5 vs SHA256:哪些用於PHP登錄?


4 Answers

我認為使用md5或sha256或為速度優化的任何哈希都非常好,並且非常好奇聽到其他用戶可能會遇到的任何反彈。 這是我的原因

  1. 如果你允許用戶使用弱密碼,比如上帝,愛情,戰爭,和平,那麼無論你使用哪種加密方式,你仍然可以讓用戶輸入密碼而不是密碼,而且這些密碼通常是首先使用的,與加密有關。

  2. 如果您沒有使用SSL或沒有證書,那麼聆聽流量的攻擊者將能夠取回密碼,並且任何使用JavaScript或類似方法進行加密的嘗試都是客戶端,並且很容易被破解和克服。 這與服務器端的數據加密不會有任何關係。

  3. 蠻力攻擊將利用弱密碼,再次因為您允許用戶輸入數據,如果您沒有登錄限制為3或甚至更多,那麼問題將再次與數據加密無關。

  4. 如果你的數據庫受到攻擊,那麼不管你做了多麼神秘的事情,最有可能的一切都會被破壞,包括你的哈希技術。 再次,這可能是一個不滿的員工XSS攻擊或SQL注入或一些其他與您的密碼加密無關的攻擊。

我相信你仍然應該加密,但我唯一能看到加密的東西是阻止那些已經擁有或以某種方式訪問數據庫的人從大聲讀出密碼。 如果有人未經授權使用數據庫,那麼您就有更大的問題需要擔心,這就是索尼為什麼要拿走它的原因,因為他們認為加密的密碼可以保護包括信用卡號碼在內的所有信息,所以它只保護那個字段。

我可以看到,在數據庫中對密碼進行複雜加密的唯一好處是可以延遲員工或其他訪問數據庫的人員讀取密碼。 因此,如果它是一個小型項目,或者我不擔心服務器端的安全問題,我會擔心更多關於確保客戶端可能發送到服務器的任何內容,例如sql注入,XSS攻擊或其他多種方式可能會受到影響。 如果有人不同意,我期待著從客戶端讀取超級加密密碼的方式。

我想嘗試清楚這一點的原因是因為人們經常認為加密的密碼意味著他們不必擔心會被盜用,並且他們不再擔心網站的安全問題。

Question

我正在做一個php登錄,我正在嘗試決定是否使用SHA1或Md5,或者我在另一個文章中讀到的SHA256。 他們中的任何一個比其他人更安全嗎? 對於SHA1 / 256,我還使用鹽嗎?

此外,這是一個安全的方式來存儲密碼作為一個哈希在MySQL中?

function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}

$salt = createSalt();

$hash = sha1($salt . $hash);



MD5由於碰撞問題而不好 - 兩個不同的密碼可能會生成相同的MD5。

Sha-1對此很有保障。 您存儲sha-1版本密碼的原因是,swerver不會將用戶的apassword保存在文件中,以便他們可能正在使用其他人的服務器。 否則,它有什麼不同?

如果黑客竊取了你的整個未加密數據庫的某些方式,那麼哈希密碼做的唯一的事情就是防止他冒充未來登錄的用戶 - 黑客已經擁有了數據。

如果你的用戶輸入的是明文密碼,攻擊者俱有散列值有什麼好處?

即使具有未來技術的黑客每秒可以為暴力攻擊產生一百萬個sha-1密鑰,您的服務器每秒會處理一百萬次登錄,以便黑客測試密鑰嗎? 這就是如果讓黑客嘗試使用sal-sha-1而不是像普通登錄那樣的密碼登錄。

最好的辦法是將錯誤的登錄嘗試限制在一些合理的數字 - 例如25,然後讓用戶停留一兩分鐘。 如果累計bady登錄嘗試在24小時內達到250,請關閉帳戶訪問權限並發送給所有者。




每個人都在談論這個問題,就像他們可以通過互聯網黑客攻擊一樣。 如前所述,限制嘗試使得不可能通過互聯網破解密碼,並且與散列無關。

鹽是必須的,但複雜性或多種鹽甚至不重要。 任何鹽都會阻止攻擊者使用預製的彩虹桌。 每位用戶使用獨特的鹽可以阻止攻擊者創建一個新的彩虹表,以對整個用戶群使用。

當整個數據庫受到攻擊並且黑客可以每秒對md5哈希執行1億次密碼嘗試時,安全性真正起作用。 SHA512慢了大約一萬倍。 具有當今強大功能的複雜密碼在使用md5時仍需要100年的時間才能完成,而使用SHA512時需要10000次。 這些鹽根本不會阻止暴力行為,因為它們總是要被人知道,如果攻擊者下載了你的數據庫,他可能已經在你的系統中了。




使用SHA256 。 這並不完美,因為SHA512對於快速哈希來說是理想的,但是在選項中,它是明確的選擇。 根據任何散列技術,請務必加密散列以增加安全性。

另外請注意,FRKT,請告訴我哪裡有人可以輕鬆破解鹽醃的SHA256哈希? 我真的很感興趣看到這一點。

重要編輯:

向前走,請使用bcrypt作為強化散列。 更多信息可以在這裡找到

編輯醃製:

使用隨機數字或隨機字節流等。您也可以將數據庫中記錄的唯一字段用作鹽,這樣每個用戶的鹽就不同。




讓我們假設下一點:黑客竊取我們的數​​據庫,包括用戶和密碼(加密)。 黑客利用他們知道的密碼創建了一個假賬戶。

由於MD5短而流行,並且幾乎每個沒有密碼的散列代碼都是字典攻擊的弱點,因此MD5很薄弱。 但..

所以,假設我們仍在使用帶有SALT的MD5。 黑客不知道SALT,但他們知道特定用戶的密碼。 所以他們可以測試:12345其中12345是知道密碼和????? 是鹽。 黑客遲早會猜測SALT。

但是,如果我們使用MD5 + SALT並且我們應用了MD5,那麼無法恢復信息。 但是,我再說一遍,MD5仍然很短。

例如,假設我的密碼是:12345.鹽是BILLCLINTON

md5:827ccb0eea8a706c4c34a16891f84e7b

帶散列的md5:56adb0f19ac0fb50194c312d49b15378

mD5與散列在MD5:28a03c0bc950decdd9ee362907d1798a我試圖使用這些在線服務,我發現沒有能夠破解它。 它唯一的MD5! (可能會像今天這將是易碎的,因為我生成了在線MD5)

如果你想要過度殺傷,那麼SHA256應用鹽和兩次就足夠了。

tldr MD5(HASH + MD5(密碼))=確定但短小,SHA256綽綽有餘。






Related