Question

J'ai une application Web Java utilisant un cadre et une sécurité de printemps pour son identifiant. Avant d’être enregistré, mes mots de passe sont chiffrés dans MD5 dans ma base de données. J'ai ajouté dans mon application-config.xml ces codes

 <security:authentication-provider>
<security:password-encoder hash="md5"/>
<security:jdbc-user-service
        data-source-ref="dataSource"
        users-by-username-query="select user_name username, user_password password, 1 enabled from users where user_name=?"
        authorities-by-username-query="select username, authority from authorities where username=?" />
</security:authentication-provider>

Au début, cela fonctionnait lorsque les mots de passe de la base de données n'étaient pas chiffrés. Mais quand je l’ai chiffré et que j’ai ajouté cet extrait dans la configuration de mon application

      <security:password-encoder hash="md5"/>

Je ne parviens pas à me connecter.

Était-ce utile?

La solution

Comment créez-vous vos hash MD5? Quelque chose comme ce qui suit fonctionne bien en Java:

MessageDigest messageDigest = MessageDigest.getInstance("MD5");  
messageDigest.update(user.getPassword().getBytes(),0, user.getPassword().length());  
String hashedPass = new BigInteger(1,messageDigest.digest()).toString(16);  
if (hashedPass.length() < 32) {
   hashedPass = "0" + hashedPass; 
}

Lorsque vous codez " koala " obtenez-vous "a564de63c2d0da68cf47586ee05984d7"?

Autres conseils

Je me rends compte que c’est un peu tard, mais Spring a des classes intégrées qui facilitent beaucoup cette tâche.

@Test
public void testSpringEncoder() {
    PasswordEncoder encoder = new Md5PasswordEncoder();
    String hashedPass = encoder.encodePassword("koala", null);

    assertEquals("a564de63c2d0da68cf47586ee05984d7", hashedPass);
}

Il s'agit d'un test unitaire que j'ai écrit à l'aide du code Spring Security intégré. Il est beaucoup plus petit que le code MessageDigest et, puisque vous utilisez déjà Spring Security, vous devriez déjà avoir les classes dans votre chemin de classe.

Avez-vous lu 6.3 .3 Hachage et authentification dans le manuel de référence Spring Security? Il mentionnait certains problèmes que vous pourriez rencontrer lors de l’utilisation du hachage de mot de passe.

Quelques possibilités énumérées:

  • Le hachage du mot de passe de la base de données peut être en Base64, alors que le résultat de MD5PasswordEncoder est en chaînes hexadécimales
  • Le hash de votre mot de passe peut être en majuscule, alors que le résultat de l'encodeur est en minuscule
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top