Probleme mit md5 String
-
Ich habe einen String mit dem MD5-Algorithmus verschlüsselt und möchte ihn nun als String in einer Funktion zurückgeben:
char *MDPrint (mdContext) MD5_CTX *mdContext; { static unsigned char back[32+1] = ""; unsigned char puffer[2+1] = ""; int i; for (i = 0; i < 16; i++) { back[i] = mdContext->digest[i]; printf ("|%02x|", mdContext->digest[i]); sprintf (puffer, "%02x", mdContext->digest[i]); printf("|%s|", puffer); printf(" %c%c ", puffer[0], puffer[1]); if ( i == 0 ) strcpy(back, puffer); else strncat(back, puffer, 2); printf("|%s|\n", back); } return back; }
Allerdings wird der String nicht richtig angehängt, so dass immer nur die letzten Zeichen stimmen.
Ausgabe:
|78||78| 78 |78| |84||84| 84 |7„84| |35||35| 35 |7„5435| |75||75| 75 |7„5u3575| |bf||bf| bf |7„5u¿575bf| |34||34| 34 |7„5u¿475bf34| |37||37| 37 |7„5u¿475bf3437| |d8||d8| d8 |7„5u¿47Øbf3437d8| |73||73| 73 |7„5u¿47Øsf3437d873| |61||61| 61 |7„5u¿47Øsa3437d87361| |a2||a2| a2 |7„5u¿47Øsa¢437d87361a2| |ab||ab| ab |7„5u¿47Øsa¢«37d87361a2ab| |a0||a0| a0 |7„5u¿47Øsa¢« 7d87361a2aba0| |a3||a3| a3 |7„5u¿47Øsa¢« £d87361a2aba0a3| |fd||fd| fd |7„5u¿47Øsa¢« £ý87361a2aba0a3fd| |ea||ea| ea |7„5u¿47Øsa¢« £ýê7361a2aba0a3fdea|
Weiß jemand woran das liegt?
Der String im puffer passt ja soweit, doch er ändert mir einfach den Rückgabestring wenn ich einen neuen Teil anhänge.
-
Ok, hab auch gerade gesehen, dass es mit einem Zeiger viel einfacher geht.
Trotzdem bleibt das Problem bestehen.
char *MDPrint (mdContext) MD5_CTX *mdContext; { static unsigned char back[32+1] = ""; int i; char *zgr; zgr = back; for (i = 0; i < 16; i++) { back[i] = mdContext->digest[i]; printf ("|%02x|", mdContext->digest[i]); sprintf (zgr, "%02x\0", mdContext->digest[i]); printf("|%s|\n", back); zgr += 2; } return back; }
-
char *md5_to_string (MD5_CTX *md5) { static char str[33]; int s; char *p = str; for (s=0; s<16; s++) p += sprintf (p, "%02x", md5->digest[s]); return str; }
-
Wow - Du bist mein Held ten