MD5-Hash in Java

Status
Nicht offen für weitere Antworten.

caesarem

Mitglied
Hallo !

Folgendes Problem:

Ich speichere den MD5-Hash von Benutzerpasswörtern in einer Datenbank. Dabei wird der Hash von der PHP-Funktion md5() erzeugt.

In Java erzeuge ich nun ebenfalls einen MD5-Hash und vergleiche ihn mit dem von PHP erzeugten Hash. Dabei kommt es zu folgendem Fehler:

Enthält der von PHP gelieferte Hash Nullen, so fehlen diese in der Java-Version einfach...

Kann mir diesbezüglich bitte jemand weiterhelfen?

Folgende Funktion nutze ich in Java zum erstellen des Hashs:

Code:
public String StringToMD5(String str)
  {	
    String r = "";	
    try {
    MessageDigest md = MessageDigest.getInstance( "MD5" );
    byte digest[] = md.digest( str.getBytes() );
    for ( int i = 0; i < digest.length; i++ )
	r = r + ( Integer.toHexString( digest[i]&0xff));
	  } catch (NoSuchAlgorithmException ex) {
      System.err.println(ex.toString());
      System.exit(1);              }
	  return r;
  }

mfg
CAESAREM
 

caesarem

Mitglied
Das hilft mir in der Tat. Komisch, dass ich das beim googeln nicht gefunden hab... :roll:

Naja, jedenfalls vielen vielen Dank für die schnelle Hilfe !

mfg
CAESAREM
 
T

TheSunToucher

Gast
Ist es auch möglich einen Hash mit einer fixenlänge zu generieren? Ich möchte aus beliebig langen oder auch kurzen Strings Hashcodes erzeugen die immer die gleiche länge haben.
Gibt es dafür schon was in Java? Sollte ich dafür MD5 benutzen? Kann man überhaupt eine Aussage über die Länge des erzeugten Strings treffen, wenn die maximal Länge bekannt ist, könnte ich die kurzen ja mit Leerzeichen auffüllen...
 
T

TheSunToucher

Gast
mic_checker hat gesagt.:
Für MD5 kannst du MessageDigest verwenden, dazu solltest du im Forum aber was finden.

Jo, mache ich, ungefähr so wie weiter oben im Thread beschrieben, aber der Hash-String der zurückkommt ist unterschiedlich lang. Ich hätte gern das er beispielsweise immer 40 Zeichen lang ist oder so...
 
T

TheSunToucher

Gast
Dann mache ich irgendwas falsch:

Code:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Test {
	
	public static String string2hash(String text) throws NoSuchAlgorithmException {
		String hash = "";
		MessageDigest md = MessageDigest.getInstance("MD5");
		byte[] digest = md.digest(text.getBytes());
		for ( int i = 0; i < digest.length; i++ ){
			hash += ( Integer.toHexString( digest[i]&0xff)); 
		}
        return hash;
	}

	public static void main(String[] args) throws Exception {
		
		String[] texte = {"dsf", "sdafljkfdhas ksdfhlk hsfdla hlsfhk ls", "", "sdfasd asdkfj f"};
		for (int i = 0; i < texte.length; i++) {
			System.out.println(string2hash(texte[i]) + " -> " + string2hash(texte[i]).length());
		}
	}
}
 

mic_checker

Top Contributor
Vielleicht kann ich mir deinen Code nachher mal angucken, hab eigentlich keine Zeit mehr.

Aber es wäre ja nicht im Sinne des Erfinders wenn man z.B. von der Prüfsumme auf die Länge der Original-Nachricht schließen könnte....
 
T

TheSunToucher

Gast
In den meisten Fällen erzeugt das ganze (also der von mir gepostete Code) einen 32 Zeichen langen String, das stimmt mit den 128 bit überein die Md5 zurückliefern soll. Anscheind wird bei der Umwandlung von bits in den String für gewisse Zeichen mehr als ein bit verwendet, den manche Strings in diesem Beispiel erzeugen 29 Zecihen lange Strings... Ich forsche weiter...

Hatte eine Erklärunghier gefunden:
www.leo.org/information/computer/software/bezug/bezug_md5_de.html
 

mic_checker

Top Contributor
Hi,
also du verwendest ja Integer.toHexString(...), ich hab da ne andere Methode, mit der auch konstant der 32 Zeichen lange String zurückgegeben wird:

Code:
public static String toHexString(byte b) {
      int value = (b & 0x7F) + (b < 0 ? 128 : 0);
       String ret = (value < 16 ? "0" : "");
       ret += Integer.toHexString(value).toUpperCase();
       return ret;
     }

Diese Methode kannst du in deiner Schleife aufrufen.....sollte eigentlich klappen. Ansonsten sag bitte bescheid.
 
T

TheSunToucher

Gast
Danke für deine Hilfe mic_checker,
Wenn ich deine Methode richtig verstehe werden für die bytes die nicht in einem gewissen Bereich liegen "0" eingefügt. Wenn ja, erhöht das nicht die Chance das verschiedene String gleiche Hashs ergeben?

Mal zum Background:
Ich möchte den Hash als "id" eines Datensatzes in einer Datenbank benutzen. Im Datensatz können lange Texte gespeichert werden und wenn man nach denen selektiert wäre das wohl schlecht für die Performance. Also war die Idee den Hash mit abzuspeichern und nach diesem zu selektieren. Da der Hash maximal 32 Zeichen lang ist definiere ich das Feld als CHAR(32). Wenn jetzt ein 29 Zeichen langer Hash erzeugt wird Funktioniert mein Vorhaben trotzdem. Ich hatte die Frage ursprünglich nur gestellt, weil ich bedenken hatte das der Hash zu lang werden könnte, aber jetzt hab ich das System verstanden...

Danke, gruß,
TheSunToucher
 

mic_checker

Top Contributor
Nein, das erhöht imho nicht die Chance das es zu Kollisionen kommt. Die Sicherheit beruht ja viel mehr auf der Länge des Hashwerts.

Schließlich stehen die Chancen das du zwei Nachrichten mit dem selben Hashwert findest bei SHA-1 bspw. bei 1 zu 2 hoch 160 (ok, in der Realität wohl eher bei 1 zu 2 hoch 80)....

Du hast ja gesehen was rauskommt wenn man so etwas nicht einbaut, du kriegst u.U. unterschiedlich lange Hashwerte.....wie du im Beitrag (FAQ) auch sehen kannst hat stevq dort noch ne andere "Variante der Ausgabe" gepostet. SOlange du dich immer an ein und die selbe hälst ist das ja auch egal.

Zu deiner Datenbank:
Was ist genau das Problem? Btw. der Hash ist nicht maximal 32 Zeichen lang, sondern genau 32 Zeichen lang (MD5) ;)
 
T

TheSunToucher

Gast
mic_checker hat gesagt.:
Zu deiner Datenbank:
Was ist genau das Problem? Btw. der Hash ist nicht maximal 32 Zeichen lang, sondern genau 32 Zeichen lang (MD5) ;)

Hab kein Problem damit, wollte nur einen fixen Hash haben um ihn in der DB abzuspeichern. Wenn er kürzer wird macht ja nix, wenn er länger werden würde gäbe es ja eine SQLException. Also auch wenn ich die erste hier gepostete Methode verwende und der String manchmal kürzer wird ist das kein Problem.

Also mein Problem ( jedenfalls dieses ;-] ) ist damit gelöst. Ich werd' das so implementieren, danke
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Hash Map Java Doc Einführung Java Basics - Anfänger-Themen 9
H java hash map: cd ablageprogramm Java Basics - Anfänger-Themen 2
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
bluetrix Hash Set hälfte entfernen Java Basics - Anfänger-Themen 7
RudiRüssel maximale Anzahl von Schlüsseln in einer Hash Tabelle Java Basics - Anfänger-Themen 2
J alternierendes Probing-Verfahren für Hash-Tabellen implementieren Java Basics - Anfänger-Themen 0
L Programmierung mit Hash Java Basics - Anfänger-Themen 3
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
B Denkanstoß - Hash ID für URL Java Basics - Anfänger-Themen 7
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
4a61766120617274697374 sha hash Java Basics - Anfänger-Themen 10
A Hash Tabelle Element suchen Java Basics - Anfänger-Themen 1
B Vererbung In offener Hash Tabelle einfügen Java Basics - Anfänger-Themen 4
T Hash von doubles generieren Java Basics - Anfänger-Themen 5
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
E Hash Code dekodieren? Java Basics - Anfänger-Themen 20
E Hash Map - Null Pointer Exception? Java Basics - Anfänger-Themen 3
MU5T4NG JPasswordField als Hash in Datenbank abspeichern Java Basics - Anfänger-Themen 3
L MD5 Hash berechnen Java Basics - Anfänger-Themen 2
P Casten Hash Map Java Basics - Anfänger-Themen 4
F Hash problem Java Basics - Anfänger-Themen 29
W automatischer password hash Java Basics - Anfänger-Themen 11
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
E Hash Map?? Java Basics - Anfänger-Themen 12
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2
J Hash-Maps / ArrayLists testen Java Basics - Anfänger-Themen 12
I Hash Wert von Dateien erzeugen Java Basics - Anfänger-Themen 2
G Implementieren einer Hash-Datenstrucktur Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben