0

我在 Glassfish 中有这个工作,如果我不散列我的密码(所以它们是纯文本)它工作正常。

但是,如果我尝试使用散列,我无法让它工作。在我的 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中包含这种领域的更“官方”版本吗?如果 FlexibleJDBCRealm(或类似的)在某个时候内置于 Java EE,那就太好了。

4

1 回答 1

0

我做错了两件事:

我没有始终如一地使用字符集编码。我现在使用 Charset.defaultCharset().name() 这也是 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,我应该可以启动并运行

于 2012-10-18T13:49:10.463 回答