"We are back" « oc.at

Java MD5-Hash

Zorr 06.05.2009 - 17:26 6608 18
Posts

Zorr

Little Overclocker
Registered: Aug 2008
Location: Wien
Posts: 102
hallo!

ich möchte in einer java-applikation das passwort beim login/registrierung in einen md5-hash umwandeln und dann in einer datenbank speichern/vergleichen.
dazu verwend ich MessageDigest. nur leider wirft mir die funktion
Integer.toHexString() alle "0"er (in worten: nuller) aus dem hash raus.
hier mal die klasse, mit der ich gerade teste:

Code:
public static void main(String[] args) throws Exception {
        /* Berechnung */
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        md5.reset();
        md5.update("asd".getBytes());
        byte[] result = md5.digest();

        /* Ausgabe */
        StringBuffer hexString = new StringBuffer();
        for (int i=0; i<result.length; i++) {
            hexString.append(Integer.toHexString(0xFF & result[i]));
        }
        System.out.println("MD5: " + hexString.toString());
    }

ich glaube es liegt an dem Integer.toHexString(0xFF & result[i]). also in der umwandlung vom bytearray in einen hexstring.

wär super wenn mir da jemand helfen würde!

tia!

edt: google suche habe ich schon versucht.

Souly

Addicted
Avatar
Registered: Mar 2004
Location: Graz
Posts: 480
Also ich hab auch mal ne Byte[] to String funktion gebraucht im selben Zusammenhang.

Code:
private static String getHexString(byte[] bytearray)
  {
    String result = "";
    for(int i = 0; i < bytearray.length; i++)
    {
      char b = (char) (bytearray[i] & 0xFF);
      if(b < 0x10)
      {
        result = result + "0";
      }
      result = result + (String) (Integer.toHexString(b));
    }
    return result;
  }

Die sollte sicher funktionieren.
Vielleicht gehts auch direkt mit "String hexString = new String(result)", aber kann ich grad net testen. EDIT: (Bringt dir ja nichts, weil du ja hexString haben willst nvm *g*)
Bearbeitet von Souly am 06.05.2009, 17:43

Zorr

Little Overclocker
Registered: Aug 2008
Location: Wien
Posts: 102
yeah! funktioniert wunderbar!

ich danke dir :)

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14807
wieso nimmst ned die funktion von der datenbank her?

edit: grad gesehen, dass da nirgends was von datenbank steht

edit2: da steht ja doch was von datenbank. danke an colo, der mich freundlicherweise auf unglaublich nette art und weise darauf hingewiesen hat.
Bearbeitet von semteX am 06.05.2009, 20:00

Zorr

Little Overclocker
Registered: Aug 2008
Location: Wien
Posts: 102
jaja ich arbeite schon mit einer datenbank. nur liegt diese auf einem server und ich greif übers inet drauf zu. wenn ich jetzt diese funktion nutzen wollte, müsste ich das passwort zuerst als plaintext zur db übertragen, was ich ja nicht will...

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12166
Und TLS ist keine Alternative? :)

Zorr

Little Overclocker
Registered: Aug 2008
Location: Wien
Posts: 102
klar wäre das auch eine möglichkeit! nur denke ich dass die umsetzung und dann natürlich auch die übertragung aufwendiger wäre als es wirklich nötig ist. und bei dem programm ist es mir nur wichtig, dass das passwort verschlüsselt übertragen wird.

jaime

Little Overclocker
Registered: Sep 2008
Location: Vienna
Posts: 51
Wieso überhaupt MD5 - das istja schon lange genackt? Da kannst es gleich weglassen..

Zorr

Little Overclocker
Registered: Aug 2008
Location: Wien
Posts: 102
also das wäre mir neu, dass jeder x-beliebige mensch einfach so md5 knacken kann!? die grundlagen für jedes gute passwort sind glaub ich jedem bekannt, und wenn man die auch anwendet, kannst gleich mal die dictionary-attack vergessen. sicher hast dann noch die brute-force, aber das kann schon ein weilchen dauern, bis da mal ein ergebnis rausschaut...

jaime

Little Overclocker
Registered: Sep 2008
Location: Vienna
Posts: 51

Zorr

Little Overclocker
Registered: Aug 2008
Location: Wien
Posts: 102
ok klar wirds immer methoden geben um etwas zu manipulieren, nur sag mir mal bitte, wie du dieses konzept auf meinen login überträgst? du gibst lokal dein passwort ein, dieses wird dann in einen md5-hash umgewandelt und so an die db gesendet. dort wird dann verglichen.

jaime

Little Overclocker
Registered: Sep 2008
Location: Vienna
Posts: 51
Du willst Sicherheit durch MD5 erreichen.
MD5 ist aber unsicher, kann gecrakt werden z.b mit ner PS3.

Wenn du wirklich Sicherheit erreichen willst soltest du eine sicheres Hashverfahren benutzen, ansonsten ist es sinnlos.

Oder wozu sendest du dann nicht gleich die Cleartextpws an die DB, wenn du dadurch nicht Sicherheit erreichen willst.

Zorr

Little Overclocker
Registered: Aug 2008
Location: Wien
Posts: 102
für meine zwecke reichts vollkommen. es is ein projekt für meine fh und mir is es ehrlich gsagt sch***egal ob da jemand ein passwort knackt oder nicht. würds hingegen sehr amüsant finden, wenn sich dann jemand wirklich die mühe macht, sich hinzusetzen um das passwort eines accounts für ein wirtschaftssimulations-spiel zu knacken :)
wenn ich etwas wirklich sicher haben will, is es sowieso klar, dass ich ssl oder was weiß ich, verwend... sei mir nicht bös, aber ich mag da jetzt nicht aus einer mücke einen elefant machen

DirtyHarry

aka robobimbo
Avatar
Registered: Apr 2001
Location: outer space
Posts: 464
Code:
MessageDigest md5 = MessageDigest.getInstance("SHA-1");

...und schon ist es eine ganze Klasse besser.

Xetrill

Little Overclocker
Avatar
Registered: Dec 2004
Location: Wien
Posts: 85
Zitat von Zorr
für meine zwecke reichts vollkommen. es is ein projekt für meine fh und mir is es ehrlich gsagt sch***egal ob da jemand ein passwort knackt oder nicht. würds hingegen sehr amüsant finden, wenn sich dann jemand wirklich die mühe macht, sich hinzusetzen um das passwort eines accounts für ein wirtschaftssimulations-spiel zu knacken :)
wenn ich etwas wirklich sicher haben will, is es sowieso klar, dass ich ssl oder was weiß ich, verwend... sei mir nicht bös, aber ich mag da jetzt nicht aus einer mücke einen elefant machen

Dein Standpunkt ist mir vollkommen suspekt.
Wo ist der große Aufwand es (halbwegs) richtig zu machen?!! Salt + ein geeigneter Hash. Wenn es dir eh egal, wozu dann das ganze überhaupt?
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz