MD5-Implementierung in Java?

Moin :)

Wollte mal schauen, wie man eine Hash-Funktion in Java programmiert - also wie das technisch auszusehen hat. Gegeben sind ja:
- Plaintext p
- MD5-Algorithmus (rfc-1321)

Nun stellt sich mir die Frage, wie ich den Plaintext einlesen muss. Was ich will, ist doch eigentlich ein Bit-Strom, so wie ich das verstehe. Der Algorithmus setzt ja vorraus, dass ich den Strom in Worte (32-bit, 4 Byte) unterteile, bevor ich den eigentlich Hash-Wert berechnen kann.

Meine Fragen sind daher:
1.) Verstehe ich das so richtig?
2.) Wie komme ich nun von einem gegebenen Plaintext p zum Bit-Strom (vorzugsweise in Java)?


*EDIT*
Kleiner Nachtrag:

1.) Wenn ich eine "normale" Text-Datei für den Plaintext benutze und diesen einlese, kann ich davon ausgehen, dass ich in der Regel einen UTF-8 habe?

2.) Angenommen also, es wäre UTF-8 - verstehe ich den Aufbau richtig, dass
- 2 Bytes Strom = 1 Zeichen Klartext sind?
- ich diese 2 Bytes als Hex-Werte im Hex-Editor ansehen kann?
- nur Werte von >128 von Bedeutung sind (also nur 1 der 2 Byte das Zeichen "selbst" beherbergt?)

Wenn ich also einen Byte-Strom einlesen könnte (was ja möglich ist in Java) - mal am Beispiel verdeutlichen:

Code:
int zeichen[] = new int[2];
int b = [i]inputstream[/i].read();
zeichen[0] = b;
int b = [i]inputstream[/i].read();
zeichen[1] = b;

ich bekäme also in zeichen[] 2 Byte-Werte (also 2 Werte zwischen 0 und 255) und könnte daraus 16 Bit wandeln?

Wäre also
Code:
zeichen[0]=0
zeichen[1]=110
So wäre also mein ASCII-Zeichen des Plaintextes ein "n" (Hex: 0x6E) ??

Was wiederum dazu führen würde, dass ich ein Bit-Strom für "n" von

Code:
BitStrom=0000 0000 0110 1110
- Ist das so richtig?
- Zwei dieser Bit-Ströme ergäben also ein "Wort"?


*EDIT_2*
Wenn ich den Algorithmus "allgemeingültig" machen will, so müsste er in der Lage sein, fast alle verfügbaren Zeichen der Welt (fängt ja bei uns mit Umlauten an) einlesen und verarbeiten zu können, oder? Demnach müsste ich davon ausgehen, dass ein WORT = 1 Zeichen Klartext abbildet - also UTF-8 nutzen mit 4 Byte pro Zeichen?

Leider habe ich im RFC und sonstwo keine Angaben zum Zeichensatz gefunden. Aber in UTF-8 kann ja eine Menge abgebildet werden.




--> Wird da jetzt ein Schuh draus? ;)



wkr,
stauder
 
schau mal hier: Java Insel
Da ist das glaube ich erklärt und auch eine Impl in Java als Beispiel. Ist zwar mit nem File, lässt sich aber umschreiben ...

mfg
serow
 
Serow, erstmal danke - aber da wird der Algorithmus nur angewandt (aus der Java-API).
Was ich gerne machen würde ist den Algorithmus (nur zum eigenen Verständnis) selbst zu implementieren.
 
Oh, tut mit Leid, da hab ich dich falsch verstanden. In diesem Fall kann ich dir leider nicht weiterhelfen.
 
Hallo,
Original von stauder
1.) Wenn ich eine "normale" Text-Datei für den Plaintext benutze und diesen einlese, kann ich davon ausgehen, dass ich in der Regel einen UTF-8 habe?
Lies doch die Datei einfach binär ein, dann hast du auch keine Probleme mit der Kodierung etc.
Des Weiteren musst du dem MD5 Algorithmus eh bytes übergeben, was eine Umwandlung von Bytes in UTF8 und dann wieder in Bytes schwachsinnig macht,


2.) Wie komme ich nun von einem gegebenen Plaintext p zum Bit-Strom (vorzugsweise in Java)?
Ich dachte du wolltest es selber schreiben, und nicht einfach nur abschreiben.

Sonst schau mal hier:
http://de.wikipedia.org/wiki/Md5

Eigentlich sehr gut erklärt
 
Zurück
Oben