Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: glas en 3 Octubre 2010, 02:11 am



Título: Programa codificador de texto a base64 estandar. [C/C++]
Publicado por: glas en 3 Octubre 2010, 02:11 am
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
  1. //Autor: Jonathan Carrasco (GLAS)
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. main()
  5. {
  6. //int tarea;
  7. void Codificar();
  8. //void Decodificar();
  9. system("clear");
  10. printf("**************************\n");
  11. printf("******** Code 64 *********\n");
  12. printf("**************************\n");
  13. //printf(" Seleccione una tarea....\n\n");
  14. //printf(" 1)Codificar base 64.\n 2)Decodificar base 64.\n");
  15. //scanf("%d",&tarea); getchar();
  16. //if(tarea==1) { Codificar(); }
  17. //if(tarea==2) { Decodificar(); }
  18. Codificar();
  19. getchar();
  20. system("clear");
  21. return 0;
  22. }
  23. //-------------------------------------------------------
  24. void Codificar()
  25. {
  26. int i,n,c=1,r=0,p=7,s=0;
  27. char texto[10000],bin[80],cambio[6],store[15000],envio[6],a;
  28. void b_decimal(char valor_b[6]);
  29. printf("Ingrese texto a Codificar: ");
  30. gets(texto); printf("\n\n");
  31. for(i=0;texto[i]!='\0';i++)
  32. {
  33. n=texto[i];
  34. //printf(" %d ",n);
  35. while(n>=1)
  36. {
  37.   r=n%2;
  38.   n=n/2;
  39.   if(r==1) { bin[p]='1'; p--; }//store[s]='1'; s++; }
  40.   if(r==0) { bin[p]='0'; p--; }//store[s]='0'; s++; }
  41. }
  42. bin[p]='0'; p--; bin[8]='\0'; p=0;
  43. while(bin[p]!='\0')
  44. {
  45. store[s]=bin[p]; s++; p++;
  46. }
  47. //puts(bin);
  48. p=7;
  49. }
  50. store[s]='\0'; //puts(store); printf(" %d bits\n",s);
  51. s=0;
  52. while(store[s]!='\0')
  53. {
  54. for(p=0;p<=5;s++,p++) { envio[p]=store[s]; }
  55. envio[6]='\0'; //puts(envio);
  56. b_decimal(envio);
  57. }
  58. }
  59. //-------------------------------------------------------
  60. void b_decimal(char valor_b[6]) //funcion conversion binario-decimal
  61. {
  62. 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
  63. while(valor_b[m]!='\0') { m++; }
  64. if(m==2) { valor_b[2]='0'; valor_b[3]='0'; valor_b[4]='0'; valor_b[5]='0'; valor_b[6]='\0'; }
  65. if(m==4) { valor_b[4]='0'; valor_b[5]='0'; valor_b[6]='\0'; }
  66. //puts(valor_b);
  67. for(c=5;c>=0;)
  68. {
  69.  n=(valor_b[c]-'0');
  70.  v=v*2;
  71.  if(v==0) v=1;
  72.  n=n*v; c--;
  73.  r=r+n;
  74. }
  75. //printf("%d  ",r);
  76.  
  77. if(r==0) { printf("A"); }
  78. if(r==1) { printf("B"); }
  79. if(r==2) { printf("C"); }
  80. if(r==3) { printf("D"); }
  81. if(r==4) { printf("E"); }
  82. if(r==5) { printf("F"); }
  83. if(r==6) { printf("G"); }
  84. if(r==7) { printf("H"); }
  85. if(r==8) { printf("I"); }
  86. if(r==9) { printf("J"); }
  87. if(r==10) { printf("K"); }
  88. if(r==11) { printf("L"); }
  89. if(r==12) { printf("M"); }
  90. if(r==13) { printf("N"); }
  91. if(r==14) { printf("O"); }
  92. if(r==15) { printf("P"); }
  93. if(r==16) { printf("Q"); }
  94. if(r==17) { printf("R"); }
  95. if(r==18) { printf("S"); }
  96. if(r==19) { printf("T"); }
  97. if(r==20) { printf("U"); }
  98. if(r==21) { printf("V"); }
  99. if(r==22) { printf("W"); }
  100. if(r==23) { printf("X"); }
  101. if(r==24) { printf("Y"); }
  102. if(r==25) { printf("Z"); }
  103.  
  104. if(r==26) { printf("a"); }
  105. if(r==27) { printf("b"); }
  106. if(r==28) { printf("c"); }
  107. if(r==29) { printf("d"); }
  108. if(r==30) { printf("e"); }
  109. if(r==31) { printf("f"); }
  110. if(r==32) { printf("g"); }
  111. if(r==33) { printf("h"); }
  112. if(r==34) { printf("i"); }
  113. if(r==35) { printf("j"); }
  114. if(r==36) { printf("k"); }
  115. if(r==37) { printf("l"); }
  116. if(r==38) { printf("m"); }
  117. if(r==39) { printf("n"); }
  118. if(r==40) { printf("o"); }
  119. if(r==41) { printf("p"); }
  120. if(r==42) { printf("q"); }
  121. if(r==43) { printf("r"); }
  122. if(r==44) { printf("s"); }
  123. if(r==45) { printf("t"); }
  124. if(r==46) { printf("u"); }
  125. if(r==47) { printf("v"); }
  126. if(r==48) { printf("w"); }
  127. if(r==49) { printf("x"); }
  128. if(r==50) { printf("y"); }
  129. if(r==51) { printf("z"); }
  130.  
  131. if(r==52) { printf("0"); }
  132. if(r==53) { printf("1"); }
  133. if(r==54) { printf("2"); }
  134. if(r==55) { printf("3"); }
  135. if(r==56) { printf("4"); }
  136. if(r==57) { printf("5"); }
  137. if(r==58) { printf("6"); }
  138. if(r==59) { printf("7"); }
  139. if(r==60) { printf("8"); }
  140. if(r==61) { printf("9"); }
  141.  
  142. if(r==62) { printf("+"); }
  143. if(r==63) { printf("/"); }
  144. if(m==2) { printf("=="); }
  145. if(m==4) { printf("="); }
  146. //printf("\n");
  147. }
  148. //funcionamiento todo OK.
  149.