Aktuelle Zeit: 20.04.2024, 00:18

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 29.03.2008, 01:36 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
MD5 ist eine sogenannte Checksumme, über die die Korrektheit von Daten überprüft werden kann. Damit kann man in einem Computerspiel zB ingame gedownloadete Daten überprüfen oder auch, als Anti-Cheat-Maßnahme, den Client anweisen, eine Checksumme von seinen Spieledaten zu senden, um so Modifikationen zu erkennen.

Da ich keine freie Library gefunden habe, die mir von der Oberfläche her gefiel und sich einfach in ein Programm einbinden lässt, hab ich einfach meine eigenen Funktionen geschrieben, mithilfe von Wikipedia und der entsprechenden RFC.
http://en.wikipedia.org/wiki/MD5
http://www.faqs.org/rfcs/rfc1321.html

Der Code steht unter der WTFPL, kann also nach Belieben verwertet werden.
http://sam.zoy.org/wtfpl/

Die Funktionen/Structs aus meinem Code:
Code:
/**
* \brief Struct holding a md5 checksum
*
* The proper way to print this checksum is:
* \code
* int i;
* for (i = 0; i < 16; i++)
* {
*     printf("%02x", ((unsigned char*)md5.h)[i]);
* }
* printf("\n");
* \endcode
*/
typedef struct md5_t
{
   unsigned int h[4];
} md5_t;

/**
* \brief Struct holding data needed while creating a md5 checksum
*/
typedef struct md5_tmp_t
{
   md5_t md5;
   char block[64];
   int size;
} md5_tmp_t;

/**
* \brief Creates a md5 struct and fills it with the initial values
*
* The struct can be used for md5_process_data() afterwards.
*
* Note that you have to call md5_finish() to get a useful md5 hash as padding
* has to be done!
*/
md5_tmp_t md5_initialize(void);
/**
* \brief Adds data to the md5 checksum
*/
void md5_process_data(md5_tmp_t* md5, const void* data, int length);
/**
* \brief Computes the final md5 checksum
*/
md5_t md5_finish(md5_tmp_t* md5);

/**
* \brief Creates a checksum from data
*/
md5_t md5_process(const void* data, unsigned int length);

/**
* \brief Copies the md5 data to a string.
*
* s must point to at least 33 bytes of allocated memory!
*/
void md5_to_string(md5_t md5, char* s);

/**
* \brief Reads in a file and stores the checksum in md5.
* \return Returns 0 if successful, -1 if not.
*/
int md5_process_file(md5_t *md5, const char* filename);


Dateianhänge:
Dateikommentar: Sourcecode
md5.c [6.63 KiB]
654-mal heruntergeladen
Dateikommentar: Kleines Testprogramm
md5sum.c [352 Bytes]
562-mal heruntergeladen
Dateikommentar: Header
md5.h [1.78 KiB]
565-mal heruntergeladen

_________________
Meine Gameengine :)
Bild
Nach oben
 Profil  
 
BeitragVerfasst: 31.03.2008, 20:51 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
So, habe das ganze mal geupdatet.
Folgendes wurde geändert:
- In der md5_process_data war noch ein Bug, der auftrat, sobald man mehre Datenblöcke nacheinander einlas. Sollte behoben sein.
- Funktionen zum Einlesen einer ganzen Datei sowie zum Kopieren einer MD5-Checksumme in einen String hinzugefügt.
- Kleines Testprogramm: md5sum.c liest eine Liste von Dateien in der Kommandozeile ein und berechnet die Checksummen.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de