現在我在數據庫(用戶表)中有一個「salt」列和一個「密碼」列,varchar(64)和sha-256哈希值作爲值。從其他用戶字段生成鹽
您認爲在密碼驗證期間消除鹽列並使用用戶的電子郵件地址生成鹽是個好主意嗎?這將節省數據庫中的一些空間。
現在我在數據庫(用戶表)中有一個「salt」列和一個「密碼」列,varchar(64)和sha-256哈希值作爲值。從其他用戶字段生成鹽
您認爲在密碼驗證期間消除鹽列並使用用戶的電子郵件地址生成鹽是個好主意嗎?這將節省數據庫中的一些空間。
爲什麼你應該使用隨機鹽爲每個密碼創作見this answer。
我不認爲這是一個問題,存儲一個隨機鹽,而不是從用戶的其他列派生它們。
但是,如果您決定使用鹽的一個或多個其他列,則需要100%確定所選值始終不變。在您的示例中,如果用戶更改了電子郵件地址,那麼您失去了驗證其密碼的任何方法。
鹽永遠不會改變。電子郵件地址可以。你對脫鹽的想法是數據庫管理員相當於過早優化,並帶來災難性後果。
但是,如果基於當前電子郵件地址在數據庫中的每次登錄嘗試都會生成salt,會如何發生? - 啊我現在明白了:) – JohnSmith
@JohnSmith,driis說的是,如果鹽是從電子郵件欄中生成的,鹽被應用到密碼,然後電子郵件被更改,密碼現在不會匹配。 –
如果我使用用戶標識(主鍵)怎麼辦?這保證不會改變。 – JohnSmith