2012-10-13 2 views
0

J'ai ceci fonctionnant dans Glassfish, et si je ne hash pas mes mots de passe (ainsi ils sont le texte normal) cela fonctionne bien. Mais, si j'essaie d'utiliser le hachage, je n'arrive pas à le faire fonctionner. Dans mon code Java, lorsque je crée un nouvel utilisateur, je hachage le mot de passe comme ceci (en utilisant les valeurs par défaut pour le codage charset)FlexibleJDBCRealm et Digest

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

Et dans les propriétés du royaume que je mets la propriété « password.digest » à MD5. Notez, je vais utiliser SHA-512 en réalité, mais j'essaie MD5 pour plus de simplicité, car il est mentionné dans les docs pour FlexibleJDBCRealm.

Des idées? Merci

PS est-ce qu'il ya une version plus «officielle» de ce genre de domaine inclus avec Java de nos jours? Ce serait génial si FlexibleJDBCRealm (ou similaire) était intégré à Java EE à un moment donné.

+0

Qu'est-ce qui ne fonctionne pas, précisément? –

+0

Il ne me laisse simplement pas me connecter avec un utilisateur dont le mot de passe est hashé. Donc je devine qu'il y a une légère différence entre la façon dont je suis le hachage et le hash que FlexibleJDBCRealm est en train de créer. J'utilise les noms d'algorithme standard dans mon code et dans les propriétés de FJDBCR, donc je ne peux pas penser à quoi d'autre serait différent. – Richard

+0

Avez-vous essayé d'utiliser des charsets autres que ceux par défaut dans votre code? Les deux dans l'appel 'getBytes()' et 'new String()'? J'ai juste peur des pailles. –

Répondre

0

je faisais deux mauvaises choses:

Je n'utilisais pas toujours l'encodage des caractères. Je vais maintenant utiliser Charset.defaultCharset() nom() qui est aussi la valeur par défaut utilisée par FJDBCR.

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

Notez qu'il est utilisé dans les deuxième et troisième lignes dans le code ci-dessus.

Je ne définissais pas non plus la propriété password.encoding (en supposant que TEXT soit utilisé par défaut).

Tout fonctionne maintenant. Juste pour ajouter une graine suivante, et utiliser SHA-512 et je devrais être opérationnel