[英]PHP MySQL User Password Encryption
我正在使用以下方式來加密用戶密碼,即AES加密。 我只想知道這是一種好習慣還是應該遵循的其他任何方法。 因為有人讓我感到困惑,說“您為什么不使用“ SALT”。我可以在Bellow中使用SALT AES加密嗎?”是我正在使用的示例查詢。
INSERT INTO user(id,passowrd) VALUES (1,AES_ENCRYPT('mypassword','key'));
那邊..
Salt不是一種加密方法,它是您需要在哈希之前添加到每個密碼的隨機位,以防止字典攻擊 。
您不應該使用可逆的AES加密來存儲用戶密碼。 您不在乎用戶的密碼是什么,只是他們知道密碼即可:因此,請勿以可逆的形式存儲密碼。
相反,您使用密碼加上一些隨機數據的安全單向哈希(例如SHA256甚至是bcrypt)。 為每個用戶生成此隨機垃圾“鹽”,並在散列之前將其附加到密碼。 然后將其與散列數據一起存儲在數據庫中,以使您以后可以比較密碼。
這樣,帶有所謂的Rainbow表 (哈希表到純文本映射的大詞典)的攻擊者就不會看到“哦,瞧,Joe User決定將密碼設置為'password'!”。 這還可以防止有人強行使用數據庫中的所有密碼,因為如果每個帳戶都有自己的獨立密碼,則每個密碼都必須受到獨立攻擊。
鹽(salt)是要添加到即將被散列的字符串中的字符序列,因此攻擊者更難獲得原始字符串。
但是,對於不是基於哈希的密碼算法,鹽就不是必需的,因為攻擊者無論如何都將獲得帶有鹽的原始字符串,只是刪除它所需要的邏輯。
使用AES_ENCRYPT,您正在使用的密鑰就是鹽。 我更喜歡像MD5或SHA這樣的單向散列,但是許多像您正在存儲的可解密密碼一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.