Mittwoch, 26. Januar 2011

Zerhacktes

Gestern bin ich wiedereinmal über den Begriff Hash gestolpert. Mir war einigermaßen klar was er Bedeutet, jedoch wusste ich nicht viel darüber. Ich wusste das man Passwörter hashen kann und dann die Hashwerte vergleicht, damit man das Passwort nicht im Klartext verschicken bzw. speichern muss.

Ich beschloss, mich ein bisschen damit zu beschäftigen und hier darüber zu schreiben.

Angenommen wir möchten eine Datenbank erstellen in der wir Zitate speichern. Jedes Zitat soll natürlich nur einmal vorkommen. Da an unserem Projekt viele Autoren mitarbeiten verliert man jedoch schnell den Überblick darüber welches Zitat schon vorhanden ist und welches nicht. Deshalb müssen wir bevor wir ein Zitat eintragen, erst überprüfen ob es schon vorhanden ist.
Unser Programm vergleicht deshalb jedes Zeichen aus dem vermeindlich neuem Text mit jedem Zeichen aus den schon vorhandenen Texten. Wenn es einen Text findet der mit dem neuen Text übereinstimmt, wird es gemeldet, andernfalls wird der Text in die Datenbank übernommen.

Wir möchten nun das Zitat: Auch die Kunst ist revolutionäres Tun - Renato Guttuso eintragen. Zuerst vergleichen wir diesen Text mit dem ersten Zitat aus unserer Datenbank, der lautet: Auch die beste Medizin hat nur aufschiebende Wirkung - Gerhard Kocher.

Nach dem zehnten Zeichen wird uns auffallen das der Text unterschiedlicht ist, und wir können ihn in die Datenbank aufnehmen. Es kann jedoch vorkommen das die ersten 100 Zeichen gleich sind, danch der Text aber unterschiedlich ist. Wir benötigten also mehr Zeit. Handelt es sich um andere Daten die noch größer und sind, so kann es einiges an Zeit kosten.

Würden wir jeden Text mit seinem Hash abspeichern so müssten wir nur die beiden Hashes miteinander vergleichen, dies würde sich natürlich nur lohnen wenn die Hashwerte kürzer sind als der Eingangstext. Deshalb ist dies auch ein wichtiges Kriterium, die Länge.

Hier nun der MD5 Hash des ersten Zitates:
013043df31ed800fc149ee52396cfaef
Und hier der des zweiten:
83c8e17721595f83d962331e982079c5


Keine Kommentare:

Kommentar veröffentlichen