md5 hashen
-
Ich hab hier schon viel gesehen darüber, aber alles in C++.
Ich bräuchte es in C.Ich habe ein Programm in c, das mir den Hash einer DATEI wiedergibt, aber ich will es umschreiben, dass es auch hashes von strings macht, die ich ihm im programm übergebe. jedesmal wenn ich was dazuschreiben will, meckert er.
ich benutze folgende Dateien:
md5.h/* MD5.H - header file for MD5C.C */ /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ /* MD5 context. */ typedef struct { UINT4 state[4]; /* state (ABCD) */ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } MD5_CTX; void MD5Init PROTO_LIST ((MD5_CTX *)); void MD5Update PROTO_LIST ((MD5_CTX *, unsigned char *, unsigned int)); void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *));global.h
/* GLOBAL.H - RSAREF types and constants */ /* PROTOTYPES should be set to one if and only if the compiler supports function argument prototyping. The following makes PROTOTYPES default to 0 if it has not already been defined with C compiler flags. */ #ifndef PROTOTYPES #define PROTOTYPES 0 #endif /* POINTER defines a generic pointer type */ typedef unsigned char *POINTER; /* UINT2 defines a two byte word */ typedef unsigned short int UINT2; /* UINT4 defines a four byte word */ typedef unsigned long int UINT4; /* PROTO_LIST is defined depending on how PROTOTYPES is defined above. If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it returns an empty list. */ #if PROTOTYPES #define PROTO_LIST(list) list #else #define PROTO_LIST(list) () #endifmddriver.c
/* MDDRIVER.C - test driver for MD2, MD4 and MD5 */ /* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All rights reserved. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ /* The following makes MD default to MD5 if it has not already been defined with C compiler flags. */ #ifndef MD #define MD 5 #endif #include <stdio.h> #include <time.h> #include <string.h> #include "global.h" #if MD == 2 #include "md2.h" #endif #if MD == 4 #include "md4.h" #endif #if MD == 5 #include "md5.h" #endif /* Length of test block, number of test blocks. */ #define TEST_BLOCK_LEN 1000 #define TEST_BLOCK_COUNT 1000 static void MDString PROTO_LIST ((char *)); static void MDTimeTrial PROTO_LIST ((void)); static void MDTestSuite PROTO_LIST ((void)); static void MDFile PROTO_LIST ((char *)); static void MDFilter PROTO_LIST ((void)); static void MDPrint PROTO_LIST ((unsigned char [16])); #if MD == 2 #define MD5_CTX MD2_CTX #define MDInit MD2Init #define MDUpdate MD2Update #define MDFinal MD2Final #endif #if MD == 4 #define MD5_CTX MD4_CTX #define MDInit MD4Init #define MDUpdate MD4Update #define MDFinal MD4Final #endif #if MD == 5 #define MD5_CTX MD5_CTX #define MDInit MD5Init #define MDUpdate MD5Update #define MDFinal MD5Final #endif /* Main driver. Arguments (may be any combination): -sstring - digests string -t - runs time trial -x - runs test script filename - digests file (none) - digests standard input */ int main (argc, argv) int argc; char *argv[]; { int i; if (argc > 1) for (i = 1; i < argc; i++) if (argv[i][0] == '-' && argv[i][1] == 's') MDString (argv[i] + 2); else if (strcmp (argv[i], "-t") == 0) MDTimeTrial (); else if (strcmp (argv[i], "-x") == 0) MDTestSuite (); else MDFile (argv[i]); else MDFilter (); return (0); } /* Digests a string and prints the result. */ static void MDString (string) char *string; { MD5_CTX context; unsigned char digest[16]; unsigned int len = strlen (string); MDInit (&context); MDUpdate (&context, string, len); MDFinal (digest, &context); printf ("MD%d (\"%s\") = ", MD, string); MDPrint (digest); printf ("\n"); } /* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte blocks. */ static void MDTimeTrial () { MD5_CTX context; time_t endTime, startTime; unsigned char block[TEST_BLOCK_LEN], digest[16]; unsigned int i; printf ("MD%d time trial. Digesting %d %d-byte blocks ...", MD, TEST_BLOCK_LEN, TEST_BLOCK_COUNT); /* Initialize block */ for (i = 0; i < TEST_BLOCK_LEN; i++) block[i] = (unsigned char)(i & 0xff); /* Start timer */ time (&startTime); /* Digest blocks */ MDInit (&context); for (i = 0; i < TEST_BLOCK_COUNT; i++) MDUpdate (&context, block, TEST_BLOCK_LEN); MDFinal (digest, &context); /* Stop timer */ time (&endTime); printf (" done\n"); printf ("Digest = "); MDPrint (digest); printf ("\nTime = %ld seconds\n", (long)(endTime-startTime)); printf ("Speed = %ld bytes/second\n", (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime)); } /* Digests a reference suite of strings and prints the results. */ static void MDTestSuite () { printf ("MD%d test suite:\n", MD); MDString (""); MDString ("a"); MDString ("abc"); MDString ("message digest"); MDString ("abcdefghijklmnopqrstuvwxyz"); MDString ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); MDString ("1234567890123456789012345678901234567890\ 1234567890123456789012345678901234567890"); } /* Digests a file and prints the result. */ static void MDFile (filename) char *filename; { FILE *file; MD5_CTX context; int len; unsigned char buffer[1024], digest[16]; if ((file = fopen (filename, "rb")) == NULL) printf ("%s can't be opened\n", filename); else { MDInit (&context); while (len = fread (buffer, 1, 1024, file)) MDUpdate (&context, buffer, len); MDFinal (digest, &context); fclose (file); printf ("MD%d (%s) = ", MD, filename); MDPrint (digest); printf ("\n"); } } /* Digests the standard input and prints the result. */ static void MDFilter () { MD5_CTX context; int len; unsigned char buffer[16], digest[16]; MDInit (&context); while (len = fread (buffer, 1, 16, stdin)) MDUpdate (&context, buffer, len); MDFinal (digest, &context); MDPrint (digest); printf ("\n"); } /* Prints a message digest in hexadecimal. */ static void MDPrint (digest) unsigned char digest[16]; { unsigned int i; for (i = 0; i < 16; i++) printf ("%02x", digest[i]); getchar(); }und md5c.c
/* MDDRIVER.C - test driver for MD2, MD4 and MD5 */ /* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All rights reserved. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ /* The following makes MD default to MD5 if it has not already been defined with C compiler flags. */ #ifndef MD #define MD 5 #endif #include <stdio.h> #include <time.h> #include <string.h> #include "global.h" #if MD == 2 #include "md2.h" #endif #if MD == 4 #include "md4.h" #endif #if MD == 5 #include "md5.h" #endif /* Length of test block, number of test blocks. */ #define TEST_BLOCK_LEN 1000 #define TEST_BLOCK_COUNT 1000 static void MDString PROTO_LIST ((char *)); static void MDTimeTrial PROTO_LIST ((void)); static void MDTestSuite PROTO_LIST ((void)); static void MDFile PROTO_LIST ((char *)); static void MDFilter PROTO_LIST ((void)); static void MDPrint PROTO_LIST ((unsigned char [16])); #if MD == 2 #define MD5_CTX MD2_CTX #define MDInit MD2Init #define MDUpdate MD2Update #define MDFinal MD2Final #endif #if MD == 4 #define MD5_CTX MD4_CTX #define MDInit MD4Init #define MDUpdate MD4Update #define MDFinal MD4Final #endif #if MD == 5 #define MD5_CTX MD5_CTX #define MDInit MD5Init #define MDUpdate MD5Update #define MDFinal MD5Final #endif /* Main driver. Arguments (may be any combination): -sstring - digests string -t - runs time trial -x - runs test script filename - digests file (none) - digests standard input */ int main (argc, argv) int argc; char *argv[]; { int i; if (argc > 1) for (i = 1; i < argc; i++) if (argv[i][0] == '-' && argv[i][1] == 's') MDString (argv[i] + 2); else if (strcmp (argv[i], "-t") == 0) MDTimeTrial (); else if (strcmp (argv[i], "-x") == 0) MDTestSuite (); else MDFile (argv[i]); else MDFilter (); return (0); } /* Digests a string and prints the result. */ static void MDString (string) char *string; { MD5_CTX context; unsigned char digest[16]; unsigned int len = strlen (string); MDInit (&context); MDUpdate (&context, string, len); MDFinal (digest, &context); printf ("MD%d (\"%s\") = ", MD, string); MDPrint (digest); printf ("\n"); } /* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte blocks. */ static void MDTimeTrial () { MD5_CTX context; time_t endTime, startTime; unsigned char block[TEST_BLOCK_LEN], digest[16]; unsigned int i; printf ("MD%d time trial. Digesting %d %d-byte blocks ...", MD, TEST_BLOCK_LEN, TEST_BLOCK_COUNT); /* Initialize block */ for (i = 0; i < TEST_BLOCK_LEN; i++) block[i] = (unsigned char)(i & 0xff); /* Start timer */ time (&startTime); /* Digest blocks */ MDInit (&context); for (i = 0; i < TEST_BLOCK_COUNT; i++) MDUpdate (&context, block, TEST_BLOCK_LEN); MDFinal (digest, &context); /* Stop timer */ time (&endTime); printf (" done\n"); printf ("Digest = "); MDPrint (digest); printf ("\nTime = %ld seconds\n", (long)(endTime-startTime)); printf ("Speed = %ld bytes/second\n", (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime)); } /* Digests a reference suite of strings and prints the results. */ static void MDTestSuite () { printf ("MD%d test suite:\n", MD); MDString (""); MDString ("a"); MDString ("abc"); MDString ("message digest"); MDString ("abcdefghijklmnopqrstuvwxyz"); MDString ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); MDString ("1234567890123456789012345678901234567890\ 1234567890123456789012345678901234567890"); } /* Digests a file and prints the result. */ static void MDFile (filename) char *filename; { FILE *file; MD5_CTX context; int len; unsigned char buffer[1024], digest[16]; if ((file = fopen (filename, "rb")) == NULL) printf ("%s can't be opened\n", filename); else { MDInit (&context); while (len = fread (buffer, 1, 1024, file)) MDUpdate (&context, buffer, len); MDFinal (digest, &context); fclose (file); printf ("MD%d (%s) = ", MD, filename); MDPrint (digest); printf ("\n"); } } /* Digests the standard input and prints the result. */ static void MDFilter () { MD5_CTX context; int len; unsigned char buffer[16], digest[16]; MDInit (&context); while (len = fread (buffer, 1, 16, stdin)) MDUpdate (&context, buffer, len); MDFinal (digest, &context); MDPrint (digest); printf ("\n"); } /* Prints a message digest in hexadecimal. */ static void MDPrint (digest) unsigned char digest[16]; { unsigned int i; for (i = 0; i < 16; i++) printf ("%02x", digest[i]); getchar(); }Am liebsten wäre es mir, wenn ich eine funktion hätte, der ich den String übergeben könnte, da mein aussenprogramm (hier nicht gepostet) mehrmals damit arbeiten muss. Vielen Dank für evtl Hilfe.
mfg,
Sol
-
Schau dir mal Zeile 190-193 an. Da siehst du das hashen und mehr brauchst du auch nicht (ausser md5.h und md5.c).
-
Ich weiß schon, aber irgendwie will er meinen code nicht annehmen.
Vll hast du einen Vorschlag wie ich eine eingabe eines strings realisieren kann der dann in den Hash gewandelt wird...mfg,
Sol
-
Eher 102-116. Mit ein paar Änderungen (Rückgabe des Wertes 'digest' statt dessen Ausgabe über MDPrint) genau das Gesuchte.
-
Kannst du mal den Code posten?
Zu dem 1. Beispiel:
MD5_CTX context; int len; unsigned char buffer[1024], digest[16]; ... MDInit (&context); while (len = fread (buffer, 1, 1024, file)) MDUpdate (&context, buffer, len); MDFinal (digest, &context); ...Buffer ist doch einfach eine Byte-Folge. Sehe nicht, was da jetzt so schwer sein soll eine Zeichenkette zu übergeben.
-
Solstice schrieb:
Vll hast du einen Vorschlag wie ich eine eingabe eines strings realisieren kann der dann in den Hash gewandelt wird...
siehe MDTestSuite()
-
ihoernchen hat wohl heute die Sonnenbrille auf.......
Noch einmal! Nimm diese Funktion hier:
static void MDString (string) char *string; { MD5_CTX context; unsigned char digest[16]; unsigned int len = strlen (string); MDInit (&context); MDUpdate (&context, string, len); MDFinal (digest, &context); printf ("MD%d (\"%s\") = ", MD, string); MDPrint (digest); printf ("\n"); }und baue sie so um, dass 'digest' nicht per MDPrint() ausgegeben wird sondern als Rückgabewert der Funktion benutzt wird. Dann hast Du es doch, z.B. so:
static void MDString2 (string, digest) char *string; char *digest; { MD5_CTX context; unsigned int len = strlen (string); MDInit (&context); MDUpdate (&context, string, len); MDFinal (digest, &context); }
-
Also in Fortgechrittenem Programmieren bin ich leider nicht wirklich klasse.
Das was ich da versuche zu Proggen ist so ne art projekt aus interresse.
Ich hab grad mal die nötigsten grundkenntnisse.welche variable soll ich mit dem string belegen?...
buffer?
digest?Ich weiß es einfach net....
mfg,
SolEdit...
hoppla... warst schneller.. ich probier das erstmal...
-
string (oder in dem anderen Code-Schnipsel buffer) ist die Eingabe.
digest die Ausgabe (der Hash).jencas schrieb:
ihoernchen hat wohl heute die Sonnenbrille auf.......
Wir haben den Beitrag etwa zeitgleich angefangen zu schreiben. Ich hab etwas länger gebraucht.
Um die Verwirrung gering zu halten:
Die beiden geposteten Code-Schnipsel machen das selbe.
MDString ist bereits die fertige Funktion die du suchst.
-
Hmm aber wenn ich sie in einer main funktion benutzen will:
error C2084: Funktion 'int __cdecl main()' hat bereits einen Funktionsrumpfhab die main ganz unten unter
static void MDPrint (digest) unsigned char digest[16]; { unsigned int i; for (i = 0; i < 16; i++) printf ("%02x", digest[i]); getchar(); }eingefügt...
Wie beheb ich das?
mfg,
Sol
-
Solstice schrieb:
Wie beheb ich das?
Zeile 77-98 entfernen??? Compiler geben selten so hilfreiche Fewhlermeldungen aus wie in Deinem Fall

-
Hmm... ok... die fehlermeldung ist weg....
wenn da nicht dieses aber wäre...ich geb nen string ein und er sagt mir
md5cracks.exe hat ein Problem festgestellt und muss beendet werden
Na super...
geb mal nochmal den code:
/* MDDRIVER.C - test driver for MD2, MD4 and MD5 */ /* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All rights reserved. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ /* The following makes MD default to MD5 if it has not already been defined with C compiler flags. */ #ifndef MD #define MD 5 #endif #include <stdio.h> #include <time.h> #include <string.h> #include "global.h" #if MD == 2 #include "md2.h" #endif #if MD == 4 #include "md4.h" #endif #if MD == 5 #include "md5.h" #endif /* Length of test block, number of test blocks. */ #define TEST_BLOCK_LEN 1000 #define TEST_BLOCK_COUNT 1000 static void MDString PROTO_LIST ((char *)); static void MDTimeTrial PROTO_LIST ((void)); static void MDTestSuite PROTO_LIST ((void)); static void MDFile PROTO_LIST ((char *)); static void MDFilter PROTO_LIST ((void)); static void MDPrint PROTO_LIST ((unsigned char [16])); #if MD == 2 #define MD5_CTX MD2_CTX #define MDInit MD2Init #define MDUpdate MD2Update #define MDFinal MD2Final #endif #if MD == 4 #define MD5_CTX MD4_CTX #define MDInit MD4Init #define MDUpdate MD4Update #define MDFinal MD4Final #endif #if MD == 5 #define MD5_CTX MD5_CTX #define MDInit MD5Init #define MDUpdate MD5Update #define MDFinal MD5Final #endif /* Main driver. Arguments (may be any combination): -sstring - digests string -t - runs time trial -x - runs test script filename - digests file (none) - digests standard input */ /* int main (argc, argv) int argc; char *argv[]; { int i; if (argc > 1) for (i = 1; i < argc; i++) if (argv[i][0] == '-' && argv[i][1] == 's') MDString (argv[i] + 2); else if (strcmp (argv[i], "-t") == 0) MDTimeTrial (); else if (strcmp (argv[i], "-x") == 0) MDTestSuite (); else MDFile (argv[i]); else MDFilter (); return (0); } */ /* Digests a string and prints the result. */ static void MDString2 (string) char *string; { MD5_CTX context; unsigned char digest[16]; unsigned int len = strlen (string); MDInit (&context); MDUpdate (&context, string, len); MDFinal (digest, &context); printf ("MD%d (\"%s\") = ", MD, string); MDPrint (digest); printf ("\n"); } static void MDString (string, digest) char *string; char *digest; { MD5_CTX context; unsigned int len = strlen (string); MDInit (&context); MDUpdate (&context, string, len); MDFinal (digest, &context); } /* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte blocks. */ static void MDTimeTrial () { MD5_CTX context; time_t endTime, startTime; unsigned char block[TEST_BLOCK_LEN], digest[16]; unsigned int i; printf ("MD%d time trial. Digesting %d %d-byte blocks ...", MD, TEST_BLOCK_LEN, TEST_BLOCK_COUNT); /* Initialize block */ for (i = 0; i < TEST_BLOCK_LEN; i++) block[i] = (unsigned char)(i & 0xff); /* Start timer */ time (&startTime); /* Digest blocks */ MDInit (&context); for (i = 0; i < TEST_BLOCK_COUNT; i++) MDUpdate (&context, block, TEST_BLOCK_LEN); MDFinal (digest, &context); /* Stop timer */ time (&endTime); printf (" done\n"); printf ("Digest = "); MDPrint (digest); printf ("\nTime = %ld seconds\n", (long)(endTime-startTime)); printf ("Speed = %ld bytes/second\n", (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime)); } /* Digests a reference suite of strings and prints the results. */ static void MDTestSuite () { printf ("MD%d test suite:\n", MD); MDString (""); MDString ("a"); MDString ("abc"); MDString ("message digest"); MDString ("abcdefghijklmnopqrstuvwxyz"); MDString ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); MDString ("1234567890123456789012345678901234567890\ 1234567890123456789012345678901234567890"); } /* Digests a file and prints the result. */ static void MDFile (filename) char *filename; { FILE *file; MD5_CTX context; int len; unsigned char buffer[1024], digest[16]; if ((file = fopen (filename, "rb")) == NULL) printf ("%s can't be opened\n", filename); else { MDInit (&context); while (len = fread (buffer, 1, 1024, file)) MDUpdate (&context, buffer, len); MDFinal (digest, &context); fclose (file); printf ("MD%d (%s) = ", MD, filename); MDPrint (digest); printf ("\n"); } } /* Digests the standard input and prints the result. */ static void MDFilter () { MD5_CTX context; int len; unsigned char buffer[16], digest[16]; MDInit (&context); while (len = fread (buffer, 1, 16, stdin)) MDUpdate (&context, buffer, len); MDFinal (digest, &context); MDPrint (digest); printf ("\n"); } /* Prints a message digest in hexadecimal. */ static void MDPrint (digest) unsigned char digest[16]; { unsigned int i; for (i = 0; i < 16; i++) printf ("%02x", digest[i]); getchar(); } main(){ char *str; scanf("%s",&str); MDString(str); printf ("/s",str); }mfg,
Sol
-
Du hast keinen Speicher für str reserviert...
Entwederchar str[100]; // für 100 Zeichenoder
char str* = malloc(100); // für 100 Zeichen ... free(str); // am Ende den mit malloc angefordertern Speicher freigeben
-
Solstice schrieb:
Ich hab grad mal die nötigsten grundkenntnisse.
"Mach" am besten ein oder zwei Tutorials und kleine Sachen, bevor du an sowas rangehst. Ansonsten wirst du mehr Frust als Lust haben.
Strings, Speicher, Zeiger etc. sollten dir ein Begriff sein.
-
gut ok... soweit...
Mit speicherverwaltung kenn ich mich leider noch ned aus...Soweit funzt es jetzt, aber die funktion... wie ruf ich die jetzt auf...
ich hab bereits:MDString(str);und
str = MDString(str);und auch mit dem Zweiten Parameter experimentiert.
irgendwie scheind die funktion anders zu funktionieren wie ich sonst so kenne.hab ich das gefühl...
im momantanen:
main(){ char str[100]; scanf("%s",&str); MDString(str); printf ("%s",str); }liefert er mir nur das zurück was ich eingegeben habe....
Ich hoff ich hab euch dann genug gelöchert...
Edit:
Sie sind mir grob ein begriff.
ich hatte vorher noch nie mit der deklaration von nem string *string gearbeitet.
Zeiger ham wir erst kürzlich gehabt.aber halt net so tiefgreifend wie ihr ^^
Speicherverwaltung kommt noch...mfg,
Sol
-
ihoernchen schrieb:
Solstice schrieb:
Ich hab grad mal die nötigsten grundkenntnisse.
"Mach" am besten ein oder zwei Tutorials und kleine Sachen, bevor du an sowas rangehst. Ansonsten wirst du mehr Frust als Lust haben.
Strings, Speicher, Zeiger etc. sollten dir ein Begriff sein.FullAck! Denn seine Selbsteinschätzung würde ich vorsichtig mal als "dezent übertrieben" einstufen

-
Solstice schrieb:
main(){ char str[100]; scanf("%s",&str); MDString(str); printf ("%s",str); }liefert er mir nur das zurück was ich eingegeben habe....
Ja, denn genau das hast Du codiert. Der Hash steckt in der Varaiblen 'digest' von MDString()!
main(){ char str[100]; char digest[16]; scanf("%s",&str); MDString2(&str, &digest); printf ("%.16s",&digest); }Kann sein, dass da ein paar '&' zuviel drin sind, meine Pure-C Zeiten liegen mittlerweile schon Jahre zurück...
-
Wie du meinst ^^
Es is halt so, dass ich es halt nebenher in der schule lern und ich mich so interressier.
Jetzt wollt ich halt mal was größeres machen, als nur durchschnittsrechner oder spielereien, sondern was, was ich auch gebrauchen kann.Nebenbei mach ich noch php, da bin ich besser drin, aber das is mit C irgendwann nicht mehr zu vergleichen.
Am anfang isses ja noch relativ gleich, aber auf der komplexen ebene von C Häng ich dann...Im Prinzip ist das was ich machen will, ein php-script in ein c-programm umschreiben.
in php ist die md5 halt schon von vornherein da, daher is das kein Thema.
Die PHP is bei mir schon fertig und funzt.Für das C Programm fehlt mir nur noch der md5 Umwandler.
Dann fertig.mfg,
SolEdit.:
Wieder zu langsam...
Gut.. die adressen haste schon richtig eingegeben.
Ich hab mal wieder vergessen was wir erst letzte woche gehabt haben... mit den Speicherplätzen, dass man da die adressen nehmen soll "&string".So ich hoff die restlichen Probleme kann ich selber beheben.. will euch ja nicht alles machen lassen. Vielen dank für die Hilfe.
mfg,
Sol
-
Na, dann viel Erfolg!!
-
Doch noch ein problem... sry...
Ich müsste nun einen eingegebenen Hash Wert mit dem erstellten Hash Wert vergleichen. Da digest aber 16 stellen hat, und mein anderer string 32 Stellen (im Array belegt) hab ich mir Folgendes einfallen lassen:
main(){ char str[100]; char test[16]; char test2[16]; scanf("%s",&str); MDString2(&str, &digest); for (i = 0; i < 16; i++) { printf ("%.02x", digest[i]); } printf ("\n\n"); for (i = 0; i < 32; i++) { test[i] = getchar(); } // ein Arrayelement mit 2 Zusammengehörigen HEX belegen for (i = 0; i < 32; i++) if (1%2==1) { int var = (i+1)/2; test2[var] = test[i-1].test[i]; } for (i = 0; i < 16; i++) printf("%x",test2[i]); printf ("\n\n"); getchar(); //Verzögerung getchar(); return 0; }Allerdings funktioniert das nicht so wie ich mir das so wunderbar vorstelle...
error C2224: Der linke Teil von '.test' muss eine Struktur/Union seinMist

Weiß einer rat?
später will ich beide vergleichen, und wenn das geht, kann ich mein und das md5 Programm miteinander verbinden. Die eingabe oben von dem 32 Stellen test ist dem wie es im anderen teil des programms ist, nachempfunden, auch damit ihr wisst, wie die belegungen sind.Vll. önnt ihr mir nochmal helfen... ich hab mich echt angestrengt und gegoogels was das zeug hält...
mfg,
Sol