2013-11-03 105 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) 

,营造出正确的字符串,我可以工作。