我正在爲web項目的php/mysql登錄系統工作。在瀏覽網頁上的很多文章之後,我想出了一個基本框架,並開始爲它編寫一些代碼。然而,我在密碼加密方面陷入了一個僵局。爲php登錄系統擴展和使用鹽生成代碼
值得一讀的Ive一晚後,發現了:
- 我應該至少SHA1或SHA2用戶密碼
- 我也應該使用一個隨機生成的鹽(這是我需要幫助與)並將其附加到密碼之前加密
- 散列密碼和隨機生成的鹽應存儲在數據庫中,然後查詢和組合/加密,然後檢查用戶散列密碼。
我的問題是在來隨機地生成鹽,
我正在爲web項目的php/mysql登錄系統工作。在瀏覽網頁上的很多文章之後,我想出了一個基本框架,並開始爲它編寫一些代碼。然而,我在密碼加密方面陷入了一個僵局。爲php登錄系統擴展和使用鹽生成代碼
值得一讀的Ive一晚後,發現了:
我的問題是在來隨機地生成鹽,
可能性我能想到的:
使用mt_rand()在一個循環接一個ASCII碼,與chr()和concatenate鹽得到相應的字符。
這允許創建任何長度的鹽。
定義的字符串與可用的字符,使用mt_rand()在一個循環中以從中挑選隨機位置,提取在所選擇的位置的字符與substr()或mb_substr()和concatenate鹽。
這允許創建具有選定字符集和長度的鹽。
使用內置函數生成一個隨機字符串(例如uniqid())並可選擇對其進行哈希處理。
這是快速和簡單。
我通常使用第二個選項。
uniqid()?
小備註在這裏:SHA1/2/...不是加密算法,而是哈希算法。這意味着無法從哈希值中找到原始密碼。另外,爲了防止彩虹表攻擊,並且只是一個很好的安全措施,不要只散列一次,如果你願意的話,散列至少100次。 – Darhuuk 2012-03-15 10:11:28