Frage

Ich verwende jdbcRealm für die Sicherheit in meinem Glasfischen v3.0.1 b22. Es ist so angelegt, dass sie die USER-Tabelle von diesem Blog folgenden für die Authentifizierung in meiner Datenbank verwenden: http : //blogs.oracle.com/foo/entry/mort_learns_jdbc_realm_authentication . Ich habe es gut funktioniert, wenn ich den Algorithmus als Klartext verlassen verdauen. Jedoch wenn ich versuche, SHA-256 für Digest-Algorithmus zu verwenden, ist es nicht mehr funktionieren. Was ich tat, ist fest, in Glassfish - Sicherheit - Realm - jdbcRealm - verdauen, dass ich will SHA-256 (I-Typ nur SHA-256 innerhalb Feld verdauen). Dann schrieb ich ein einfaches Java-Programm Passwort Text in SHA-256 Hash zu konvertieren. Ich fügen Sie dann das Hash in meinem Passwort-Feld in der Datenbank. By the way, ist durch ein Passwort Feldtyp varchar (30). Ich kann nicht in mehr anmelden. Eine Sache habe ich bemerkt, dass meine einfache Java-Programm erzeugt verschiedene Hash jedes Mal für den gleichen Textfeld ein.

Hier sind mein einfaches Java-Programm:

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        String text = "admin";
        md.update(text.getBytes("UTF-8"));
        byte[] digest = md.digest();
        System.out.println(digest.toString());
War es hilfreich?

Lösung

Die jdbcRealm erlaubt Werte von Hex-oder Base64-kodiert. Sie müssen eine dieser in Ihrem Realm-Konfiguration spezifizieren und in Ihrem Code, wandeln das Byte-Array in einem der folgenden Formate:

Base64:

import com.sun.org.apache.xml.internal.security.utils.Base64;
...
byte[] digest = md.digest();
System.out.println(Base64.encode(digest));

Hex:

...
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
    String hex = Integer.toHexString(0xff & digest[i]);
    if (hex.length() == 1) sb.append('0');
    sb.append(hex);
}
System.out.println(sb.toString());
  

btw, Passwort-Feld ist der Typ varchar (30)

Sie müssen die Größe Ihrer Passwort-Feld erhöhen. SHA-256 Base64 und Hex-Werte sind 45 und 64 Zeichen lang sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top