2013-11-03 165 views
0

我在MySQL數據庫中遇到了有關我的用戶密碼哈希的問題。在開發過程中,我使用內存數據庫(使用Playframework),並且一切正常。但是,當使用持久數據庫時,我恢復的散列與我上傳的散列不匹配。我想因此還有的是某種編碼問題從數據庫恢復後,MD5密碼哈希不匹配

這裏有一些測試,我跑去找問題

Salt at registration: hlsqjnv5vhplrgrsoa4g524b0q 
Hash at registration: v�!�ȡuNB͞l�q� 
User pwd hash: v!?uNB?lq 
Salt at login: hlsqjnv5vhplrgrsoa4g524b0q 
Input pwd hash: v�!�ȡuNB͞l�q� 

凡「用戶PWD哈希」是哈希從數據庫恢復(我們可以看到它與註冊時的散列不匹配),「輸入pwd散列」是來自登錄表單(與註冊時散列相匹配)的散列。

這裏是我得到的哈希MessageDigest.getInstance("MD5").digest((password+salt).getBytes("UTF-8"))

而且我的數據庫是utf8_general_ci

所以一切都似乎是在UTF-8,但我不能發現問題。

感謝

+0

您是否將bate數組作爲字符串存儲在數據庫中?在轉換過程中可能會丟失一些零件。 – Peanut

回答

0

歐凱,我發現一個workaroud:

創建哈希剛過我用

import sun.misc.BASE64Encoder 

(new BASE64Encoder()).encode(encryptedPwd) 

,營造出正確的字符串,我可以工作。