MD5 Password-Check per PL/SQL und Java

Oracle bietet in der DB mehrere Möglichkeiten Werte in der DB zu verschlüsseln. Hat man jedoch den Anwendungsfall nur ein einzelnes Feld (z.B. Passwort) in der DB zu verschlüsseln und muss man sowohl per Java als auch per PL/SQL dazu eine LoginCheck-Funktion implementieren, kann dies mit folgender Routine einfach umgesetz werden.

Angepasste PL/SQL Funktion aus Oracle Metalink zur Verschlüsselung:


FUNCTION md5encode (CLEARTEXT IN VARCHAR2) RETURN VARCHAR2
IS
chk VARCHAR2(16);
hex VARCHAR2(32);
i INTEGER;
c INTEGER;
h INTEGER;
BEGIN
IF CLEARTEXT IS NULL THEN
RETURN '';
ELSE
chk := dbms_obfuscation_toolkit.md5(input_string=>CLEARTEXT);
FOR i IN 1..16 LOOP
c := ASCII(SUBSTR(chk, i, 1));
h := TRUNC(c / 16);
IF h >= 10 THEN
hex := hex || CHR(h + 55);
ELSE
hex := hex || CHR(h + 48);
END IF;
h := MOD(c, 16);
IF h >= 10 THEN
hex := hex || CHR(h + 55);
ELSE
hex := hex || CHR(h + 48);
END IF;
END LOOP;
RETURN hex;
END IF;

END;

Dazu passende Java Verschlüsselung:

public String md5encode( String password ) throws Exception {
MessageDigest md5 = MessageDigest.getInstance( "MD5" ) ;
byte[] rawBytes = md5.digest( password.getBytes() ) ;

String charIndex = "0123456789ABCDEF";
StringBuffer sb = new StringBuffer(rawBytes.length * 2);

byte rawByte;
for (int i = 0; i> 4) & 0xF;
sb.append(charIndex.charAt(ix));
ix = rawByte & 0xF;
sb.append(charIndex.charAt(ix));
}
return sb.toString();
}

Die Checkroutine verschlüsselt nun das Klartextpassword per md5encode () und macht mit dem gespeicherten verschlüsselten Password einfachen einen String-Vergleich.

Java Psoudocode dazu:

String myCurrentPassword = „hallo123“
if(obfuscatedPasswordFromDBColumn.equals(md5encode(myCurrentPassword)) == true)
System.println(„Login OK“);
else
System.println(„Login Fehlgeschlagen“);

Advertisements

~ von bmaier - 28. Mai 2008.

Kommentar verfassen

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

 
%d Bloggern gefällt das: