Java MD5-Hash

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/java_md5-hash_207149/page_1 - zur Vollversion wechseln!


Zorr schrieb am 06.05.2009 um 17:26

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 schrieb am 06.05.2009 um 17:35

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*)


Zorr schrieb am 06.05.2009 um 17:44

yeah! funktioniert wunderbar!

ich danke dir :)


semteX schrieb am 06.05.2009 um 19:42

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.


Zorr schrieb am 07.05.2009 um 07:53

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 schrieb am 08.05.2009 um 12:36

Und TLS ist keine Alternative? :)


Zorr schrieb am 08.05.2009 um 14:30

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 schrieb am 16.05.2009 um 10:21

Wieso überhaupt MD5 - das istja schon lange genackt? Da kannst es gleich weglassen..


Zorr schrieb am 16.05.2009 um 10:28

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 schrieb am 16.05.2009 um 10:48

http://www.win.tue.nl/hashclash/SoftIntCodeSign/


Zorr schrieb am 16.05.2009 um 11:19

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 schrieb am 16.05.2009 um 11:21

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 schrieb am 16.05.2009 um 11:45

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 schrieb am 16.05.2009 um 20:55

Code:
MessageDigest md5 = MessageDigest.getInstance("SHA-1");

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


Xetrill schrieb am 17.05.2009 um 21:00

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?




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025