Advertisement
AntonioVillanueva

Decodicacion Base64 en C ...

Aug 16th, 2016
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.48 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. //T W F u
  6. #define _T ( tmp[0+offset] & 0x3F)
  7. #define _W ( tmp[1+offset] & 0x3F)
  8. #define _F ( tmp[2+offset] & 0x3F)
  9. #define _u ( tmp[3+offset] & 0x3F)
  10.  
  11. //M a n
  12. #define _M ((_T<<2) | (_W>>4))
  13. #define _a ((_W <<4) | (_F >>2))   
  14. #define _n (((_F&0x03)<<6) | _u)
  15.  
  16.  
  17. int main (){
  18.    
  19.     int offset=0;//Gestiona por bloques de 4
  20.     int pto=0;//Gestiona por bloques de 3 es el destino
  21.     int menos=0;//elimina = del final
  22.     char *decodificador="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  23.  
  24.     char *Codificado="TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=";
  25.  
  26. /*
  27. Man is distinguished, not only by his reason, but by this singular passion from other animals,
  28. which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable
  29. generation of knowledge, exceeds the short vehemence of any carnal pleasure.
  30. */
  31.  
  32.     //char *Codificado="TWFu";//Man
  33.     //char *Codificado="TWFuTWFuTWFuTWFu";//Man
  34.    
  35.     char *tmp= (char*) calloc (strlen (Codificado)+2,sizeof (char*));
  36.     if (!tmp){printf ("Error calloc \n");return 0;}
  37.        
  38.    
  39.     tmp=memcpy (tmp,Codificado,strlen(Codificado)-menos);
  40.    
  41.    
  42.     char *claro= (char*) calloc (strlen (Codificado)+4,sizeof (char*));
  43.     if (!claro){printf ("Error calloc \n");return 0;}
  44.    
  45.    
  46.     //printf ("%s",tmp);
  47.  
  48.  
  49.     //Decodificacion de la base 64
  50.     for (int i=0;i<strlen(Codificado);i++){//Recorre el string
  51.         //printf (" Caracter =%c ",Codificado[i]);
  52.         for(int pos=0;pos < (strlen (decodificador));pos++){//Busca el caracter
  53.         //printf (" Caracter =%c  conpara=%c\n",Codificado[i],decodificador[pos]);
  54.             if (tmp[i]==decodificador[pos]){//Lo ha encontrado el caracter
  55.                 //printf (" , %d \n",pos);
  56.                 tmp[i]=(unsigned char)pos;
  57.                 break;
  58.             }                  
  59.         }
  60.     }
  61.    
  62.     //Elimina los ==
  63.     if (tmp[strlen(tmp)-1]=='='){tmp[strlen(tmp)-1]='\0';} 
  64.     if (tmp[strlen(tmp)-2]=='='){tmp[strlen(tmp)-2]='\0';} 
  65.    
  66.     //Texto limpio original salta de 4 en     4 el destino de 3 en tres
  67.     for (offset=0; offset<(strlen (tmp)); offset+=4 ,pto+=3){
  68.         claro[0+pto]=_M;   
  69.         claro[1+pto]=_a;
  70.         claro[2+pto]=_n;   
  71.     }
  72.    
  73.    
  74.     printf ("%s",claro);
  75.     if (tmp) {free (tmp);}
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement