Passwort hash

Status
Nicht offen für weitere Antworten.

Foermchen82

Top Contributor
Hallo zusammen.

Ich hab folgendes Problem:

ich speichere mir passwörter in einer OracleDB, die ich vorher in einen Hash umgewandelt habe. Das Datenbankspalte für das passwort ist ein varchar(64).

folgenden algorithmus verwende ich:

Code:
MessageDigest crypter = MessageDigest.getInstance("SHA-512");
			byte[] bytes = crypter.digest((uncryptedPassword + userId).getBytes());
			result = new String(bytes);

soweit so gut.

Jetzt erzeuge ich mir jedoch in der anwendung den hash nocheinmal und vergleiche ihn mit dem DB-wert, den ich aus der DB lade und ich bekomme einen etwas anderen wert. Wieso????
 
außerdem solltest du nicht einfach nen neuen String aus den bytes erstellen sondern die bytes lieber als hex oder base64 codieren. die bytes die du hast müssen schließlich keinen sinn übergeben in jedem charset. oder nen blob statt string in der datenbank.

schau dir am einfachsten mal commons-codecs DigestUtil an.
 
ok das mit der Hex-Codierung des Byte[] macht sinn. Dazu hab ich auch nen Beispiel gefunden:

Code:
    public static String asHex(byte buf[])
    {
            StringBuffer strbuf = new StringBuffer(buf.length * 2);

            for(int i=0; i< buf.length; i++)
            {
                    if(((int) buf[i] & 0xff) < 0x10)
                            strbuf.append("0");
                    strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
            }
            return strbuf.toString();
    }

kann mir das aber mal bitte jemand erklären??

alles was ich da verstehe ist, dass man über das byte[] iteriert. nur was heist der rest??
 
ok das mit der Hex-Codierung des Byte[] macht sinn. Dazu hab ich auch nen Beispiel gefunden:

Code:
    public static String asHex(byte buf[])
    {
            StringBuffer strbuf = new StringBuffer(buf.length * 2);

            for(int i=0; i< buf.length; i++)
            {
                    if(((int) buf[i] & 0xff) < 0x10)
                            strbuf.append("0");
                    strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
            }
            return strbuf.toString();
    }

kann mir das aber mal bitte jemand erklären??

alles was ich da verstehe ist, dass man über das byte[] iteriert. nur was heist der rest??
 
ok das mit der Hex-Codierung des Byte-array macht sinn. Dazu hab ich auch nen Beispiel gefunden:

Code:
    public static String asHex(byte buf[])
    {
            StringBuffer strbuf = new StringBuffer(buf.length * 2);

            for(int i=0; i< buf.length; i++)
            {
                    if(((int) buf[i] & 0xff) < 0x10)
                            strbuf.append("0");
                    strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
            }
            return strbuf.toString();
    }

kann mir das aber mal bitte jemand erklären??

alles was ich da verstehe ist, dass man über das byte-array iteriert. nur was heist der rest??
 
das if schaut ob die zahl < 16 ist, denn dann ist die hex-formatierung ja nur einstellig. darum wird in dem fall eine "0" angehängt.
unf danach beim tostring die zahl als hex. erklärung der parameter findest du in der javadoc

aber wie ich sagte: DigestUtils 😉
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben