base64 problem...



  • Hallihallo, ich hab ein kleines problem mit base64 codierung, und zwar wird nicht der korrekte schlüßel erzeugt. wenn mir da jemand einen kleinen tipp geben kann wäre ich sehr dankbar =))
    Nich wundern, das '=' ist als einziges noch nicht implementiert.

    Hier der Source:

    #pragma once
    #include <iostream>
    using namespace std;
    
    char* base64_encode(const char *bytes, int size)
    {
    	const char* base64_charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    
    	int rest_bytes;
    	int real_bytes;
    	int base64_buffer;
    	char *input_buffer;
    	char *encoded_buffer;
    
    	unsigned char in[3];
    	unsigned char out[4];
    
    	rest_bytes = size % 3;
    	if(rest_bytes == 0)
    		real_bytes = size;
    	else if(rest_bytes == 1)
    		real_bytes = size + 2;
    	else if(rest_bytes == 2)
    		real_bytes = size + 1;
    
    	input_buffer = new char[real_bytes];
    	memset(input_buffer, 0, real_bytes);
    	//strcpy(input_buffer, bytes);
    	memcpy(input_buffer, bytes, size);
    
    	base64_buffer = 4 * real_bytes / 3;
    	encoded_buffer = new char[base64_buffer + 1];
    	memset(encoded_buffer, 0, base64_buffer + 1);
    
    	for(int i = 0, k = 0; i < real_bytes; i += 3, k += 4)
    	{
    		in[0] = input_buffer[i + 0];
    		in[1] = input_buffer[i + 1];
    		in[2] = input_buffer[i + 2];
    
    		out[0] = (in[0] & 0xFC) >> 2;
    		out[1] = ((in[0] & 0x03) << 4) | ((in[1] & 0xF0) >> 4);
    		out[2] = ((in[1] & 0x0F) << 2) | ((in[2] & 0xC0) >> 6);
    		out[3] = (in[2] & 0x3F);
    
    		for(int j = 0; j < 4; j++)
    		{
    			encoded_buffer[j + k] = base64_charset[out[j]];
    		}
    	}
    	encoded_buffer[base64_buffer] = '\0';
    
    	if(input_buffer != NULL)
    		delete[] input_buffer;
    
    	return encoded_buffer;
    }
    

    Vielen Dank im voraus



  • Lass dir Zwischenergebnisse ausgeben, rechne von Hand nach und grenze so das Problem ein. Ich weiß noch nicht mal, was denn als Ergebnis rauskommen soll geschweige denn was für ein Algorithmus das ist, also kann ich dir schlecht helfen.



  • Du kannst dir auch die Klasse hier runterladen http://www.codeguru.com/cpp/cpp/algorithms/article.php/c5099/



  • Ich weiß ich weiß, es gibt einiges zum herunterladen. Aber ich bin nun mal der Typ der es lieber selbst auf die Reihe bekommen möchte ^^. Warum immer nur c&p?
    Ist doch langweilig, da brauch ich ja nix mehr lernen geschweige denn programmieren =))


  • Mod

    und zwar wird nicht der korrekte schlüßel erzeugt.

    gib doch mal ein beispiel für den input, den entstehenden output und das erwartete ergebnis. auf den ersten blick fällt mir an der funktion nichts auf.



  • Also, der Inputstring ist "Hello World!" und der Output ohne "=" falls böntigt ist "SGVsbG8gV29ybGQh"


  • Mod

    VirtualDreams schrieb:

    Also, der Inputstring ist "Hello World!" und der Output ohne "=" falls böntigt ist "SGVsbG8gV29ybGQh"

    das ist doch auch richtig.



  • Ist jetzt nicht wahr, oder? Hatte einen string von der wikipdia probiert und da stimmt das mit meinem nicht überein ??? Aber das freut mich wirklich wenn das stimmt. Danke nochmal!!!!



  • wieso hast du kein padding drin (=)? was passiert mit den letzten beiden byte bei dir, d.h. wenn weniger als 24bit am ende übrig bleiben?


Log in to reply