簡體   English   中英

PHP MySQL用戶密碼加密

[英]PHP MySQL User Password Encryption

我正在使用以下方式來加密用戶密碼,即AES加密。 我只想知道這是一種好習慣還是應該遵循的其他任何方法。 因為有人讓我感到困惑,說“您為什么不使用“ SALT”。我可以在Bellow中使用SALT AES加密嗎?”是我正在使用的示例查詢。

INSERT INTO user(id,passowrd) VALUES (1,AES_ENCRYPT('mypassword','key'));
  • 我希望您的數據庫列未命名為“ passowrd”。

那邊..

Salt不是一種加密方法,它是您需要在哈希之前添加到每個密碼的隨機位,以防止字典攻擊

應該使用可逆的AES加密來存儲用戶密碼。 您不在乎用戶的密碼什么,只是他們知道密碼即可:因此,請勿以可逆的形式存儲密碼。

相反,您使用密碼加上一些隨機數據的安全單向哈希(例如SHA256甚至是bcrypt)。 為每個用戶生成此隨機垃圾“鹽”,並在散列之前將其附加到密碼。 然后將其與散列數據一起存儲在數據庫中,以使您以后可以比較密碼。

這樣,帶有所謂的Rainbow表 (哈希到純文本映射的大詞典)的攻擊者就不會看到“哦,瞧,Joe User決定將密碼設置為'password'!”。 這還可以防止有人強行使用數據庫中的所有密碼,因為如果每個帳戶都有自己的獨立密碼,則每個密碼都必須受到獨立攻擊。

您不會將“ SALT”與AES一起使用,通常會與SHA一起使用。

有關詳細信息和說明,請參見:

https://stackoverflow.com/a/4351749/1232478

鹽(salt)是要添加到即將被散列的字符串中的字符序列,因此攻擊者更難獲得原始字符串。

但是,對於不是基於哈希的密碼算法,鹽就不是必需的,因為攻擊者無論如何都將獲得帶有鹽的原始字符串,只是刪除它所需要的邏輯。

使用AES_ENCRYPT,您正在使用的密鑰就是鹽。 我更喜歡像MD5或SHA這樣的單向散列,但是許多像您正在存儲的可解密密碼一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM