Programa codificador de texto a base64 estandar. [C/C++]

Iniciado por glas, 3 Octubre 2010, 02:11 AM

0 Miembros y 1 Visitante están viendo este tema.

glas

Hola amigos, estudiando un tema de protocolos de internet me encontre con la codificación en base64, la verdad no la conocia, por tanto me puse a estudiar su funcionamiento y que mejor forma de aprenderla que haciendo un programa en C, el cual codifica un texto ingresado en la consola en donde devuelve su resultado en base64 en la misma consola, el programa lo hice bajo Linux Ubuntu, bueno aqui lo dejo espero les ayude en algo, dejen su comentario y/o consejo, trate de utilizar lo menos posibe de funciones ya existentes, bueno saludos. ::)

NOTA: (algunas funciones como; printf() y puts() eran para analisis y depuracion del programa las deje como comentarios), dejen comentario de como reducir el codigo por favor.

Código (cpp) [Seleccionar]

//Autor: Jonathan Carrasco (GLAS)
#include<stdio.h>
#include<stdlib.h>
main()
{
//int tarea;
void Codificar();
//void Decodificar();
system("clear");
printf("**************************\n");
printf("******** Code 64 *********\n");
printf("**************************\n");
//printf(" Seleccione una tarea....\n\n");
//printf(" 1)Codificar base 64.\n 2)Decodificar base 64.\n");
//scanf("%d",&tarea); getchar();
//if(tarea==1) { Codificar(); }
//if(tarea==2) { Decodificar(); }
Codificar();
getchar();
system("clear");
return 0;
}
//-------------------------------------------------------
void Codificar()
{
int i,n,c=1,r=0,p=7,s=0;
char texto[10000],bin[80],cambio[6],store[15000],envio[6],a;
void b_decimal(char valor_b[6]);
printf("Ingrese texto a Codificar: ");
gets(texto); printf("\n\n");
for(i=0;texto[i]!='\0';i++)
{
n=texto[i];
//printf(" %d ",n);
while(n>=1)
{
  r=n%2;
  n=n/2;
  if(r==1) { bin[p]='1'; p--; }//store[s]='1'; s++; }
  if(r==0) { bin[p]='0'; p--; }//store[s]='0'; s++; }
}
bin[p]='0'; p--; bin[8]='\0'; p=0;
while(bin[p]!='\0')
{
store[s]=bin[p]; s++; p++;
}
//puts(bin);
p=7;
}
store[s]='\0'; //puts(store); printf(" %d bits\n",s);
s=0;
while(store[s]!='\0')
{
for(p=0;p<=5;s++,p++) { envio[p]=store[s]; }
envio[6]='\0'; //puts(envio);
b_decimal(envio);
}
}
//-------------------------------------------------------
void b_decimal(char valor_b[6]) //funcion conversion binario-decimal
{
int c,n,v=0,r=0,m=0; //forma de conversion: 11001 -> 1*(2e4) + 1*(2e3) + 0*(2e2) + 0*(2e1) + 1*(2e0) = 16 + 8 + 0 + 0 + 1 = 25
while(valor_b[m]!='\0') { m++; }
if(m==2) { valor_b[2]='0'; valor_b[3]='0'; valor_b[4]='0'; valor_b[5]='0'; valor_b[6]='\0'; }
if(m==4) { valor_b[4]='0'; valor_b[5]='0'; valor_b[6]='\0'; }
//puts(valor_b);
for(c=5;c>=0;)
{
 n=(valor_b[c]-'0');
 v=v*2;
 if(v==0) v=1;
 n=n*v; c--;
 r=r+n;
}
//printf("%d  ",r);

if(r==0) { printf("A"); }
if(r==1) { printf("B"); }
if(r==2) { printf("C"); }
if(r==3) { printf("D"); }
if(r==4) { printf("E"); }
if(r==5) { printf("F"); }
if(r==6) { printf("G"); }
if(r==7) { printf("H"); }
if(r==8) { printf("I"); }
if(r==9) { printf("J"); }
if(r==10) { printf("K"); }
if(r==11) { printf("L"); }
if(r==12) { printf("M"); }
if(r==13) { printf("N"); }
if(r==14) { printf("O"); }
if(r==15) { printf("P"); }
if(r==16) { printf("Q"); }
if(r==17) { printf("R"); }
if(r==18) { printf("S"); }
if(r==19) { printf("T"); }
if(r==20) { printf("U"); }
if(r==21) { printf("V"); }
if(r==22) { printf("W"); }
if(r==23) { printf("X"); }
if(r==24) { printf("Y"); }
if(r==25) { printf("Z"); }

if(r==26) { printf("a"); }
if(r==27) { printf("b"); }
if(r==28) { printf("c"); }
if(r==29) { printf("d"); }
if(r==30) { printf("e"); }
if(r==31) { printf("f"); }
if(r==32) { printf("g"); }
if(r==33) { printf("h"); }
if(r==34) { printf("i"); }
if(r==35) { printf("j"); }
if(r==36) { printf("k"); }
if(r==37) { printf("l"); }
if(r==38) { printf("m"); }
if(r==39) { printf("n"); }
if(r==40) { printf("o"); }
if(r==41) { printf("p"); }
if(r==42) { printf("q"); }
if(r==43) { printf("r"); }
if(r==44) { printf("s"); }
if(r==45) { printf("t"); }
if(r==46) { printf("u"); }
if(r==47) { printf("v"); }
if(r==48) { printf("w"); }
if(r==49) { printf("x"); }
if(r==50) { printf("y"); }
if(r==51) { printf("z"); }

if(r==52) { printf("0"); }
if(r==53) { printf("1"); }
if(r==54) { printf("2"); }
if(r==55) { printf("3"); }
if(r==56) { printf("4"); }
if(r==57) { printf("5"); }
if(r==58) { printf("6"); }
if(r==59) { printf("7"); }
if(r==60) { printf("8"); }
if(r==61) { printf("9"); }

if(r==62) { printf("+"); }
if(r==63) { printf("/"); }
if(m==2) { printf("=="); }
if(m==4) { printf("="); }
//printf("\n");
}
//funcionamiento todo OK.
Ser bueno hoy en día es ser tomado por bobo, ser justo... por imbécil, tener moral y honor... es ser retrógrada... y tener compasión es tan solo de débiles. Pero entonces que le voy a hacer si resulta que soy: Bobo, Imbécil, Retrograda y Débil... es que casi lo prefiero, lo contrario sería haber caído en un individualismo estúpido que no lleva a más que la soledad.