Java MD5-Hash
Zorr 06.05.2009 - 17:26 6608 18
Zorr
Little Overclocker
|
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: 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
|
Also ich hab auch mal ne Byte[] to String funktion gebraucht im selben Zusammenhang. 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
|
yeah! funktioniert wunderbar! ich danke dir
|
semteX
begehrt die rostschaufel
|
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
|
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
AdministratorGNUltra
|
Und TLS ist keine Alternative?
|
Zorr
Little Overclocker
|
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
|
Wieso überhaupt MD5 - das istja schon lange genackt? Da kannst es gleich weglassen..
|
Zorr
Little Overclocker
|
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
|
|
Zorr
Little Overclocker
|
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
|
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
|
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
|
MessageDigest md5 = MessageDigest.getInstance("SHA-1");
...und schon ist es eine ganze Klasse besser.
|
Xetrill
Little Overclocker
|
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?
|