ubuntuusers.de

C Programmierung: Prüfsumme bilden?

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

DenniX

Avatar von DenniX

Anmeldungsdatum:
3. Juni 2007

Beiträge: 380

Hey ihr,

wollte ein Programm schreiben was mir aus bestimmten Textteilen eine Prüfsumme bildet. Egal ob MD5 oder andere.
Jetzt habe ich mal nach MD5 gesucht und bin auf viele Header sowie .c(pp) Dateien gestoßen... Schnell eingebunden und festgestellt:
Geht nicht. Entweder wars nur für C++ oder ich habe 100 Fehler bekommen.
Hatte auch ein Sourcecode gefunden den ich unter Linux kompilieren muss, und dann das Programm benutzen muss.

Was ich suche ist eine Funktion die ich dann im Endeffekt benutzen kann.
z.b. habe ich ein String:
char myStr[500];

In myStr steht dann z.B.: "Hallo Welt! Wie geht es euch?"

Dann möchte ich per:
printf("%s\n", md5(myStr));
die Prüfsumme haben ☺

Vorgefertigte Funktionen gibt es anscheinend nicht, aber wie kann ich es für mein "kleines" Projekt hinkriegen? ☺
Am besten ist eine Windows-Lösung, am allerbesten eine, die auf Linux UND Windows funktioniert.

LG,
DenniX

LCID_Fire

Anmeldungsdatum:
1. Oktober 2005

Beiträge: Zähle...

Also für Dateien gäb es md5sum (http://www.linuxmanpages.com/man1/md5sum.1.php), was du dann von stdio lesen kannst.
Hast du schon gcrypt http://www.gnupg.org/documentation/manuals/gcrypt/ angesehen?

Darkcloud

Anmeldungsdatum:
10. Juni 2007

Beiträge: 69

http://www.fourmilab.ch/md5/

Ich hab allerdings noch nicht versucht, dass Programm unter Linux zu kompilieren. Ich glaube aber nicht, dass das ein großes Problem sein sollte.
Unter Windows leistet es bei mir schon länger gute Diense (eingebunden in "Senden an" als Batch-Datei 😉).

Nilres

Anmeldungsdatum:
7. Dezember 2006

Beiträge: 371

Ich aber\^^ Lief gut durch und scheint zu klappen:

nb md5 # gcc main.c md5.c -o md5
nb md5 # ./md5 main.c
309100840DD51CF547167D772A2B2C96  main.c
nb md5 #


mfg nils

Darkcloud

Anmeldungsdatum:
10. Juni 2007

Beiträge: 69

Jup, die Summe hab ich hier in Win auch 😉

DenniX

(Themenstarter)
Avatar von DenniX

Anmeldungsdatum:
3. Juni 2007

Beiträge: 380

Das letzte sieht schonmal gut aus, der Programmcode ist zwar total für'n ... (bzgl Einrücken) aber das lässt sich ja ändern.

Ich schau mal ob ich es hinbekomme ☺ Danke schonmal!

DenniX

(Themenstarter)
Avatar von DenniX

Anmeldungsdatum:
3. Juni 2007

Beiträge: 380

OK Super ☺ Habs hinbekommen 😀

Danke ☺

Soxda2

Avatar von Soxda2

Anmeldungsdatum:
21. Januar 2008

Beiträge: 296

Wohnort: Frankfurt (Oder)

Gibt es eigentlich noch andere Gründe Prüfsummen zu bilden, als Passwortvergleiche, Vergleich von Dateien etc. ?

Wieso macht man sowas ?

DimonVS

Anmeldungsdatum:
1. August 2007

Beiträge: 19

Wohnort: Schwarzwald

Ja. Die Digest-Funktionen (wie z.B. MD5) werden noch dazu benutzt um die Datenintegritaet zu ueberpruefen und die Echtheit (stichwort digitale Signatur) von einem Dokument sicherzustellen (dass das Dokument von Herrn. X. erstellt wurde). Das passiert im prinzip so: ein wichtiges Dokument soll per Email verschickt werden. Der Versender bildet Hash-Wert mit MD5, und verschluesselt diesen Wert mit seinem privaten Schluessel (stichwort assymetrische Verschluesselung). Die Datei und verschluesselte MD5 werden verschickt. Der Empfaenger bildet auch Hash-Wert und entschluesselt die verschluesselte MD5 mit dem oeffentlichen Schluessel. Sind die MD5's gleich, kann er davon ausgehen, dass niemand den Inhalt des Dokuments manipuliert hat und dass dieses Dokument wirklich vom Empfaenger X versendet wurde.

Soxda2

Avatar von Soxda2

Anmeldungsdatum:
21. Januar 2008

Beiträge: 296

Wohnort: Frankfurt (Oder)

Hab ich verstanden.

Gibs auch Sicherheits irrelevante Verwendung von Hashes ?

DimonVS

Anmeldungsdatum:
1. August 2007

Beiträge: 19

Wohnort: Schwarzwald

ja, gibts auch, z. B. bei einer Hash-Tabelle. Damit wird die Suche von einem Element in einem Array beschluenigt.

Soxda2

Avatar von Soxda2

Anmeldungsdatum:
21. Januar 2008

Beiträge: 296

Wohnort: Frankfurt (Oder)

Wie genau funktioniert das mit der Suche in dem Array ?

(Sorry das ich hier vom eigentlichen Thema abweiche, aber will mich auch nen bissel weiterbilden)

DimonVS

Anmeldungsdatum:
1. August 2007

Beiträge: 19

Wohnort: Schwarzwald

Also nehmen wir mal an, du hast eine Woerterbuch-Software programmiert. Du hast irgendwo alle englichen Woerter mit der Uebersetzung gespeichert. Wenn man die Woerter in ein riesigen Array speichert, hat man ein kleines Problem bei der Suche - die Geschwindigkeit. Denn man muss das gesuchte Wort in jedem Element des Arrays suchen. Wenn man z.B. eine Million eintraege hat und gerade das letzte Wort sucht, muss man eine Million mal jedes Element durchgehen.

Mit Hash-Tabell definierst du eine Hash-Funktion, die aus einer Folge von Zeichen einen Zahlenwert erstellt. Dann reduziertst du die Anzahl von Elementen in deinem Array auf z.B. 50.000. Du speicherst die Woerter neu und zwar so: Hash(Wort) modulo 50.000. So bekommst du eine Zahl, die du als Index nimmst und in diese Position im Array dein Wort ablegst. Ist an der Position schon ein Wort vorhanden (und es wird passieren, denn du hast eine Million Woerter und nur 50000 Plaetze) - hast du eine Kollision. Am einfachsten, man benutzt eine Ueberlaufliste. D. H. Die Woerter im Array werden in den Listen gespeichert.

Wenn man das hat, hat man so eine Struktur:

Array[0] = Wort1 → wort2->wort3
Array[1] = wort4 → wort5
...
usw

Wenn man dann ein Wort sucht, bildet man hashwert modulo 50000 und bekommt index. Dann kannst du im Array[index] nach dem Wort in der Liste weitersuchen.

Die Geschwindigkeit ist natuerlich von der hash-funktion und der Anzahl der Plaetze im Array abhaengig

Weitere info hier Hash-Tabelle

Antworten |