Base64 encoding, anscheinend ein Verständnisproblem



  • Guten Tag,

    ich versuche gerade einen base64-decoder zu programmieren, das Prinzip 8 bittige in 6 bittige chars aufzusplitten entzieht sich nicht meinem Verstand. Jedoch sitze ich jetz schon länger an dem Problem und komm nicht dahinter.

    Sollte es nicht theoretisch reichen wenn man den ersten Byte eines base64 encodierten Strings um 2 nach links shiftet und den zweiten um 4 nach rechts?

    ich hab hier auch kleinen Testcode. der mir nicht sehr viel geholfen hat.

    bestimmt könnt ihr das!

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    char bin[9];
    
    char* to_bin(unsigned int in2) /* Returns a string with '0' and '1'*/
    {
    
    	unsigned int c = 9;
    	unsigned int in=in2;
    	while(--c > 0)
    	{
    		if(in%2 == 1 || in == 1) bin[c-1] = '1';
    		else bin[c-1] = '0';
    		in /= 2;
    	}
    
    	bin[8] = '\0';
    	return(bin);
    }
    
    void decodeblock(unsigned char *in,unsigned char *out)
    {
    	out[0] = (in[0] << 2 |  (in[1]&0x30) >>4);
    	puts(to_bin(in[0])); // first byte
    	puts(to_bin(in[1])); // second one
    	puts(to_bin(out[0])); // result
    	puts(to_bin('f'));   // what it should be
    }
    
    int main()
    {
    	unsigned char encoded[] = "Zm9vYmFyDQo=";
    	unsigned char plain[] = "foobar";
    	unsigned char *test = malloc(15);
    	memset(test,0,15);
    	int i;unsigned char *p;
    	/*  To Compare Encoded and plaintext
    	p = encoded;
    	while(*p)
    	{
    		printf("%c[%s] ",*p,to_bin(*p));
    		p++;
    	}
    	printf("\n");
    	p = plaintext;
    	while(*p)
    	{
    		printf("%c[%s] ",*p,to_bin(*p));
    		p++;
    	}
    	printf("\n");
    	*/
    	decodeblock(encoded,test);
    	printf("%c",test[0]);
    
    }
    


  • Problem gelöst kann geclosed werden!


Anmelden zum Antworten