Checksumme berechnen
-
Hallo.
Kann mir jemand erklären, wie man die Checksumme einer Datei errechnet oder hat jemand vielleicht ein paar nützliche Links?
Ich hab keine Ahnung, wie ich da rangehen soll.
Ich brauche das für mein c++ programm, das Dateien miteinander vergleichen soll.
Gruß, Amalthea
-
Dateien vergleichen? Byteweise auslesen und Bytes vergleichen. Bei ner Checksum kommst nämlich auch nicht drum rum, alles auszulesen. Hmmm. Wenn du natürlich sowas wie eine Checksum vorrätig halten willst zum schnellen Vergleich, dann empfiehlt sich SHA-1. MD5 ist auch sehr gebräuchlich, aber etwas unsicherer.
-
Das Programm vergleicht die Dateien anhand mehrerer Kriterien. Eines davon soll halt die Checksumme sein...
Und wie du schon geschrieben hast, sollen diese Kriterien vorrätig gehalten werden.Hast du nen Link, wie man SHA-1 berechnet bzw. umsetzt?
-
http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf
http://www.faqs.org/rfcs/rfc3174.html
Vielleicht hilft dir das was. Ich persönlich fände es aber relativ töricht, das selber zu implementieren, ich würde da eher mal nach ner Bibliothek schaun. Außer natürlich, es interessiert dich so stark. Aber wenn du nur ein Programm schreiben willst, was dies nutzt...http://www.jonelo.de/java/jacksum/index_de.html
(Ein OpenSource Java-Programm)
-
md5 usw. halte ich für etwas übertrieben. nimm doch einfach das hier:
/* CRC16 implementation acording to CCITT standards */ static const unsigned short crc_tab[16] = { 0x0000, 0x1081, 0x2102, 0x3183, 0x4204, 0x5285, 0x6306, 0x7387, 0x8408, 0x9489, 0xA50A, 0xB58B, 0xC60C, 0xD68D, 0xE70E, 0xF78F }; unsigned short crc_update (unsigned short crc, unsigned char c) { crc = (((crc >> 4) & 0x0FFF) ^ crc_tab[((crc ^ c) & 0x000F)]); crc = (((crc >> 4) & 0x0FFF) ^ crc_tab[((crc ^ (c>>4)) & 0x000F)]); return crc; }
du beginnst mit einem beliebigen startwert (z.b. 0 oder 0xffff) und machst dann mit jedem byte der datei:
crc_wert = crc_update (crc_wert, byte_aus_datei);
-
net schrieb:
md5 usw. halte ich für etwas übertrieben. nimm doch einfach das hier: (crc16)
naja, nehmen wir gleich crc32, weil das dem prozessor genauso weh oder nicht weh tut.
md5 und fetteres halte ich auch für völlig übertrieben, wenn es nicht um crypto-sicherheit geht.
-
volkard schrieb:
md5 und fetteres halte ich auch für völlig übertrieben, wenn es nicht um crypto-sicherheit geht.
Wobei MD5 da ja mittlerweile wieder untertrieben ist
-
Aber seltsamerweise scheinbar noch das gebräuchlichste...
-
Optimizer schrieb:
Aber seltsamerweise scheinbar noch das gebräuchlichste...
Natürlich. Etwas was solange überall benutzt und von jedem gedankenlos übernommen wurde, wird ja nicht so schnell ersetzt werden. Allein die Problematik, wenn Protokolle auf MD5 basieren. Es ist ja nicht so, dass die Leute damit rechnen, dass man einen bestimmten Krypto Algo mal ersetzen muss. Was leider eine naive Vorstellung ist. Aber jetzt wird es OT