根據PHP的doc,bcrypt鹽製成的存儲bcrypt哈希
「$ 2A $」,一個兩位數的成本參數, 「$」,並從字母」 22位./0-9A -Za-Z」
所以,如果我使用的隱窩()函數來散列我的密碼,所得到的輸出包括前7個字符($ 2A $ 10 $,如果10是成本參數),爲部分的鹽 - 根據我在互聯網上找到的所有例子,這個完整的輸出寫入db。
我想知道在鹽和加密數據的其餘部分存儲這些第一個字符有什麼意義。他們的含義對我來說是完全清楚的,但我不明白爲什麼這些信息應該與其餘的散列一起寫。他們不是「只是」關於算法和計算的適應性成本的信息嗎?那麼存儲這種與應用程序相關的信息有什麼好處?而且(即使聽起來可能幼稚)爲什麼要將它們泄露給最終能夠抓取我的數據庫的攻擊者?
謝謝,ircmaxell!事實上,爲什麼鹽必須與密碼一起存儲,這一點我已經很清楚了。我只是想知道爲什麼我還必須存儲有關算法的信息(crypt()輸出的前7個字符)和成本。你的答案的第二部分刪除我所有的疑惑。 – geezmo