Frage

Ich habe eine Java-Web-Anwendung mit Federrahmen und Feder Sicherheit für seine Anmeldung. In meiner Datenbank habe ich meine Passwörter MD5 verschlüsselt, bevor sie gespeichert werden. Ich habe in meiner Anwendung-config.xml dieses 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>

Zuerst arbeitete es, wenn das Passwort in der DB nicht verschlüsselt wurde. Aber wenn ich es verschlüsselt und hinzugefügt, um diese Schnipsel in meiner Anwendung Config

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

Ich bin nicht in der Lage einzuloggen.

War es hilfreich?

Lösung

Wie erstellen Sie Ihr MD5-Hashes? So etwas wie die folgenden funktioniert gut in 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; 
}

Wenn Sie kodieren "Koala" do you get "a564de63c2d0da68cf47586ee05984d7"?

Andere Tipps

Ich weiß, dies ein wenig zu spät, aber Frühling hat integrierte Klassen, die diese viel einfacher machen.

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

    assertEquals("a564de63c2d0da68cf47586ee05984d7", hashedPass);
}

Dies ist ein Unit-Test, dass ich das in Spring Security Code gebaut schrieb verwenden, ist es viel kleiner ist als der Messagecode ist und da Sie bereits Spring Security verwenden, sollten Sie die Klassen in Ihrem Classpath bereits haben.

Haben Sie lesen 6.3 0,3 Hashing und Authentifizierung Abschnitt von Spring Security-Referenzhandbuch? Es erwähnt einige mögliche Probleme, die Sie bei der Verwendung Passwort-Hashing auftreten können.

Einige Möglichkeiten aufgelistet:

  • Datenbank Passwort-Hash könnte in Base64 sein, während das Ergebnis aus MD5PasswordEncoder in hexadezimalen Zeichenfolge ist
  • Ihr Passwort-Hash kann in Großbuchstaben sein, während das Ergebnis aus dem Codierer in Kleinbuchstaben Strings ist
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top