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 🙂


Anmelden zum Antworten