2012-10-13 69 views
0

我有这个在Glassfish中工作,如果我不哈希我的密码(所以他们是纯文本)它工作正常。FlexibleJDBCRealm和摘要

但是,如果我尝试使用哈希,我不能得到它的工作。在我的Java代码,当我创建一个新用户,我散列这样的密码(使用字符集编码的默认值)

MessageDigest md5 = MessageDigest.getInstance("MD5");      
    byte[] hashedPassword = md5.digest(password.getBytes()); 
    return new String(hashedPassword); 

而且在我设置了“password.digest”属性的境界属性MD5。

注意,我将在现实中使用SHA-512,但为了简化,我尝试使用MD5,因为它在FlexibleJDBCRealm的文档中提到。

任何想法?谢谢

PS现在有更多'官方'版本的Java包含这种领域吗?如果在某些时候将JavaJBCRealm(或类似的)内置到Java EE中,那就太好了。

+0

什么是不工作,恰恰? –

+0

它只是不让我用密码被散列的用户登录。所以我猜测我的散列方式和FlexibleJDBCRealm即将推出的散列之间存在细微差别。我在我的代码和FJDBCR的属性中都使用了标准算法名称,所以我想不出还会有什么不同。 – Richard

+0

您是否使用代码中的默认值以外的字符集进行了试验?在调用'getBytes()'和'new String()'?恐怕只是抓着吸管。 –

回答

0

我在做两件事情是错的:

我并没有一贯地使用字符编码。我现在用Charset.defaultCharset()的名称(),它是由也FJDBCR使用的默认:

MessageDigest sha = MessageDigest.getInstance("MD5");      
byte[] digestedPassword = sha.digest(password.getBytes(Charset.defaultCharset().name())); 
return new String(digestedPassword, Charset.defaultCharset().name()); 

注意它在两个在上面的代码中的第二和第三行中。

我也没有设置password.encoding属性(假设TEXT将被用作默认值)。

现在所有的作品。刚要添加种子,并使用SHA-512,我应该启动并运行