2012-10-13 97 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,我應該啓動並運行