2011-10-12 67 views
0

我正在研究一個需要用戶進行認證的應用程序。我通過擁有一個具有配置文件表的數據庫並在表內有一個用戶名和密碼來完成此操作。我將讓用戶輸入他們的用戶名和密碼,然後將他們的給定數據與數據庫中的數據進行比較。如果他們是相同的,那麼他們登錄。這是做到這一點的正確方法嗎?用戶認證密碼登記數據庫

如果這是做到這一點的正確方法,我如何將用戶的給定密碼與數據庫中的密碼進行比較?數據庫中的密碼使用密碼功能進行了加密。

謝謝!

+0

PASSWORD()不應該由您的應用程序使用,如參考資料中所述:http://dev.mysql.com/doc/refman/5.0/en/encryption-functions.html#function_password另外,如果您需要支持另一個數據庫? – TJR

+0

我不需要支持另一個數據庫,這僅僅是一個類。 – prolink007

+0

下面是與此類似的另一個問題:http://stackoverflow.com/questions/1751152/mysql-password-function – TJR

回答

1

對此,您可以使用AES_ENCRYPT(),AES_DECRYPT()函數。這是我建議的方式。在你的程序中,你保存一個存儲加密密鑰的恆定全局變量。

所以你可以比較這樣的密碼。

SELECT USER_ID FROM輪廓,其中profile.userID = '+用戶id +' 和profile.password = AES_ENCRYPT( '+ givenpassword +', ' 「+ USER_ENCRYPTION_KEY +」')

希望這會幫助你。

Prasad。

+0

你給了我一個正確的方向很大的推動。我使用了不同的加密算法,但這正是我所期待的。謝謝 – prolink007

1

你有基本的,是的。 習慣上將salt添加到密碼中,然後使用單向散列算法(例如SHA1(),SHA256()等)對其進行散列,然後將用戶名,鹽和散列密碼+ salt存儲在數據庫中。 驗證憑據時,根據用戶名檢索salt,然後使用它來散列提供的密碼,然後將其與您存儲的密碼進行比較。對用戶的失敗響應不應指出密碼或用戶名是否錯誤。只是有些東西是不正確的。

鹽可以防止字典的攻擊。單向散列可防止任何人(包括您或用戶)永遠無法檢索密碼。您只能重置它。

這絕不是一個綜合指南。只是更多的建議,讓你更接近。

相關問題