Base64 a ASCII (decoder - javascript)

Iniciado por @XSStringManolo, 9 Agosto 2019, 15:54 PM

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

@XSStringManolo

Pasa de Base64 a ASCII. Uso libre.

encoder https://foro.elhacker.net/desarrollo_web/ascii_a_base64_encoder_javascript-t498409.0.html

Etiquetas javascript omitidas debido a filtro cloudflare.
Código (javascript) [Seleccionar]
<html>
<head><title>Decoder Base64</title>
</head>
<body>
//EtiquetaJavascript
var CadenaEnTextoq = "";
var CadenaEnTextoTamanhoq;
var CadenaEnASCIIq = "";
var contadorIguales = 0;
var CadenaEnASCIIq2 = "";
var CadenaEnASCIIqTamanho = 0;
var BitsDe8en8 = "";
var CadenaDecoded = "";
var CadenaEnASCIIq2Tamanho = 0;
var contador_x = 0;
var contador_z = 0;
var mantenerseEnBucleq = true;
 
CadenaEnTextoq = prompt("Pon el texto");

CadenaEnTextoTamanhoq = CadenaEnTextoq.length;

for (var i = 0; i < CadenaEnTextoTamanhoq; ++i)
{
  if (CadenaEnTextoq[i] == 'A')
  {
  CadenaEnASCIIq += "000000";
  }

if (CadenaEnTextoq[i] == 'B')
  {
  CadenaEnASCIIq += "000001";
  }

if (CadenaEnTextoq[i] == 'C')
  {
  CadenaEnASCIIq += "000010";
  }

if (CadenaEnTextoq[i] == 'D')
  {
  CadenaEnASCIIq += "000011";
  }

if (CadenaEnTextoq[i] == 'E')
  {
  CadenaEnASCIIq += "000100";
  }

if (CadenaEnTextoq[i] == 'F')
  {
  CadenaEnASCIIq += "000101";
  }

if (CadenaEnTextoq[i] == 'G')
  {
  CadenaEnASCIIq += "000110";
  }

if (CadenaEnTextoq[i] == 'H')
  {
  CadenaEnASCIIq += "000111";
  }

if (CadenaEnTextoq[i] == 'I')
  {
  CadenaEnASCIIq += "001000";
  }

if (CadenaEnTextoq[i] == 'J')
  {
  CadenaEnASCIIq += "001001";
  }

if (CadenaEnTextoq[i] == 'K')
  {
  CadenaEnASCIIq += "001010";
  }

if (CadenaEnTextoq[i] == 'L')
  {
  CadenaEnASCIIq += "001011";
  }

if (CadenaEnTextoq[i] == 'M')
  {
  CadenaEnASCIIq += "001100";
  }

if (CadenaEnTextoq[i] == 'N')
  {
  CadenaEnASCIIq += "001101";
  }

if (CadenaEnTextoq[i] == 'O')
  {
  CadenaEnASCIIq += "001110";
  }

if (CadenaEnTextoq[i] == 'P')
  {
  CadenaEnASCIIq += "001111";
  }

if (CadenaEnTextoq[i] == 'Q')
  {
  CadenaEnASCIIq += "010000";
  }

if (CadenaEnTextoq[i] == 'R')
  {
  CadenaEnASCIIq += "010001";
  }

if (CadenaEnTextoq[i] == 'S')
  {
  CadenaEnASCIIq += "010010";
  }

if (CadenaEnTextoq[i] == 'T')
  {
  CadenaEnASCIIq += "010011";
  }

if (CadenaEnTextoq[i] == 'U')
  {
  CadenaEnASCIIq += "010100";
  }

if (CadenaEnTextoq[i] == 'V')
  {
  CadenaEnASCIIq += "010101";
  }

if (CadenaEnTextoq[i] == 'W')
  {
  CadenaEnASCIIq += "010110";
  }

if (CadenaEnTextoq[i] == 'X')
  {
  CadenaEnASCIIq += "010111";
  }

if (CadenaEnTextoq[i] == 'Y')
  {
  CadenaEnASCIIq += "011000";
  }

if (CadenaEnTextoq[i] == 'Z')
  {
  CadenaEnASCIIq += "011001";
  }

if (CadenaEnTextoq[i] == 'a')
  {
  CadenaEnASCIIq += "011010" ;
  }

if (CadenaEnTextoq[i] == 'b')
  {
  CadenaEnASCIIq += "011011";
  }

if (CadenaEnTextoq[i] == 'c')
  {
  CadenaEnASCIIq += "011100";
  }

if (CadenaEnTextoq[i] == 'd')
  {
  CadenaEnASCIIq += "011101";
  }

if (CadenaEnTextoq[i] == 'e')
  {
  CadenaEnASCIIq += "011110";
  }

if (CadenaEnTextoq[i] == 'f')
  {
  CadenaEnASCIIq += "011111";
  }

if (CadenaEnTextoq[i] == 'g')
  {
  CadenaEnASCIIq += "100000";
  }

if (CadenaEnTextoq[i] == 'h')
  {
  CadenaEnASCIIq += "100001";
  }

if (CadenaEnTextoq[i] == 'i')
  {
  CadenaEnASCIIq += "100010";
  }


if (CadenaEnTextoq[i] == 'j')
  {
  CadenaEnASCIIq += "100011";
  }

if (CadenaEnTextoq[i] == 'k')
  {
  CadenaEnASCIIq += "100100";
  }

if (CadenaEnTextoq[i] == 'l')
  {
  CadenaEnASCIIq += "100101";
  }

if (CadenaEnTextoq[i] == 'm')
  {
  CadenaEnASCIIq += "100110";
  }

if (CadenaEnTextoq[i] == 'n')
  {
  CadenaEnASCIIq += "100111";
  }

if (CadenaEnTextoq[i] == 'o')
  {
  CadenaEnASCIIq += "101000";
  }

if (CadenaEnTextoq[i] == 'p')
  {
  CadenaEnASCIIq += "101001";
  }

if (CadenaEnTextoq[i] == 'q')
  {
  CadenaEnASCIIq += "101010";
  }


if (CadenaEnTextoq[i] == 'r')
  {
  CadenaEnASCIIq += "101011";
  }

if (CadenaEnTextoq[i] == 's')
  {
  CadenaEnASCIIq += "101100";
  }

if (CadenaEnTextoq[i] == 't')
  {
  CadenaEnASCIIq += "101101";
  }

if (CadenaEnTextoq[i] == 'u')
  {
  CadenaEnASCIIq += "101110";
  }

if (CadenaEnTextoq[i] == 'v')
  {
  CadenaEnASCIIq += "101111";
  }

if (CadenaEnTextoq[i] == 'w')
  {
  CadenaEnASCIIq += "110000";
  }

if (CadenaEnTextoq[i] == 'x')
  {
  CadenaEnASCIIq += "110001";
  }

if (CadenaEnTextoq[i] == 'y')
  {
  CadenaEnASCIIq += "110010";
  }

if (CadenaEnTextoq[i] == 'z')
  {
  CadenaEnASCIIq += "110011";
  }

if (CadenaEnTextoq[i] == '0')
  {
  CadenaEnASCIIq += "110100";
  }

if (CadenaEnTextoq[i] == '1')
  {
  CadenaEnASCIIq += "110101";
  }

if (CadenaEnTextoq[i] == '2')
  {
  CadenaEnASCIIq += "110110";
  }


if (CadenaEnTextoq[i] == '3')
  {
  CadenaEnASCIIq += "110111";
  }

if (CadenaEnTextoq[i] == '4')
  {
  CadenaEnASCIIq += "111000";
  }

if (CadenaEnTextoq[i] == '5')
  {
  CadenaEnASCIIq += "111001";
  }

if (CadenaEnTextoq[i] == '6')
  {
  CadenaEnASCIIq += "111010";
  }

if (CadenaEnTextoq[i] == '7')
  {
  CadenaEnASCIIq += "111011";
  }

if (CadenaEnTextoq[i] == '8')
  {
  CadenaEnASCIIq += "111100";
  }

if (CadenaEnTextoq[i] == '9')
  {
  CadenaEnASCIIq += "111101";
  }

if (CadenaEnTextoq[i] == '+')
  {
  CadenaEnASCIIq += "111110";
  }

if (CadenaEnTextoq[i] == '/')
  {
  CadenaEnASCIIq += "111111";
  }

if (CadenaEnTextoq[i] == '=')
  {
  contadorIguales++;
  }

}

CadenaEnASCIIqTamanho = CadenaEnASCIIq.length;

if (contadorIguales == 1)
{
  for  (var i = 0; i < (CadenaEnASCIIqTamanho -2) ; ++i)
  {
  CadenaEnASCIIq2 += CadenaEnASCIIq[i];
  }
}

if (contadorIguales == 2)
{
for  (var i = 0; i < (CadenaEnASCIIqTamanho -4) ; ++i)
  {
  CadenaEnASCIIq2 += CadenaEnASCIIq[i];
  }
}

CadenaEnASCIIq2Tamanho = CadenaEnASCIIq2.length;


do
{
BitsDe8en8 += CadenaEnASCIIq2[contador_z];

++contador_x;
++contador_z;

if (contador_x == 8)
{

         
if ( BitsDe8en8 == "01000001")
      {
       CadenaDecoded += "A";
      }

if ( BitsDe8en8 == "01000010")
      {
       CadenaDecoded += "B";
      }

if ( BitsDe8en8 == "01000011")
      {
       CadenaDecoded += "C";
      }

if ( BitsDe8en8 == "01000100")
      {
       CadenaDecoded += "D";
      }

if ( BitsDe8en8 == "01000101")
      {
       CadenaDecoded += "E";
      }

if ( BitsDe8en8 == "01000110")
      {
       CadenaDecoded += "F";
      }

if ( BitsDe8en8 == "01000111")
      {
       CadenaDecoded += "G";
      }

if ( BitsDe8en8 == "01001000")
      {
       CadenaDecoded += "H";
      }

if ( BitsDe8en8 == "01001001")
      {
       CadenaDecoded += "I";
      }

if ( BitsDe8en8 == "01001010")
      {
       CadenaDecoded += "J";
      }

if ( BitsDe8en8 == "01001011")
      {
       CadenaDecoded += "K";
      }

if ( BitsDe8en8 == "01001100")
      {
       CadenaDecoded += "L";
      }

if ( BitsDe8en8 == "01001101")
      {
       CadenaDecoded += "M";
      }

if ( BitsDe8en8 == "01001110")
      {
       CadenaDecoded += "N";
      }

if ( BitsDe8en8 == "01001111")
      {
       CadenaDecoded += "O";
      }

if ( BitsDe8en8 == "01010000")
      {
       CadenaDecoded += "P";
      }

if ( BitsDe8en8 == "01010001")
      {
       CadenaDecoded += "Q";
      }

if ( BitsDe8en8 == "01010010")
      {
       CadenaDecoded += "R";
      }

if ( BitsDe8en8 == "01010011")
      {
       CadenaDecoded += "S";
      }

if ( BitsDe8en8 == "01010100")
      {
       CadenaDecoded += "T";
      }

if ( BitsDe8en8 == "01010101")
      {
       CadenaDecoded += "U";
      }

if ( BitsDe8en8 == "01010110")
      {
       CadenaDecoded += "V";
      }

if ( BitsDe8en8 == "01010111")
      {
       CadenaDecoded += "W";
      }

if ( BitsDe8en8 == "01011000")
      {
       CadenaDecoded += "X";
      }

if ( BitsDe8en8 == "01011001")
      {
       CadenaDecoded += "Y";
      }

if ( BitsDe8en8 == "01011010")
      {
       CadenaDecoded += "Z";
      }

if ( BitsDe8en8 == "01100001")
      {
       CadenaDecoded += "a";
      }

if ( BitsDe8en8 == "01100010")
      {
       CadenaDecoded += "b";
      }

if ( BitsDe8en8 == "01100011")
      {
       CadenaDecoded += "c";
      }

if ( BitsDe8en8 == "01100100")
      {
       CadenaDecoded += "d";
      }

if ( BitsDe8en8 == "01100101")
      {
       CadenaDecoded += "e";
      }

if ( BitsDe8en8 == "01100110")
      {
       CadenaDecoded += "f";
      }

if ( BitsDe8en8 == "01100111")
      {
       CadenaDecoded += "g";
      }

if ( BitsDe8en8 == "01101000")
      {
       CadenaDecoded += "h";
      }

if ( BitsDe8en8 == "01101001")
      {
       CadenaDecoded += "i";
      }

if ( BitsDe8en8 == "01101010")
      {
       CadenaDecoded += "j";
      }

if ( BitsDe8en8 == "01101011")
      {
       CadenaDecoded += "k";
      }

if ( BitsDe8en8 == "01101100")
      {
       CadenaDecoded += "l";
      }

if ( BitsDe8en8 == "01101101")
      {
       CadenaDecoded += "m";
      }

if ( BitsDe8en8 == "01101110")
      {
       CadenaDecoded += "n";
      }

if ( BitsDe8en8 == "01101111")
      {
       CadenaDecoded += "o";
      }

if ( BitsDe8en8 == "01110000")
      {
       CadenaDecoded += "p";
      }

if ( BitsDe8en8 == "01110001")
      {
       CadenaDecoded += "q";
      }

if ( BitsDe8en8 == "01110010")
      {
       CadenaDecoded += "r";
      }

if ( BitsDe8en8 == "01110011")
      {
       CadenaDecoded += "s";
      }

if ( BitsDe8en8 == "01110100")
      {
       CadenaDecoded += "t";
      }

if ( BitsDe8en8 == "01110101")
      {
       CadenaDecoded += "u";
      }

if ( BitsDe8en8 == "01110110")
      {
       CadenaDecoded += "v";
      }

if ( BitsDe8en8 == "01110111")
      {
       CadenaDecoded += "w";
      }

if ( BitsDe8en8 == "01111000")
      {
       CadenaDecoded += "x";
      }

if ( BitsDe8en8 == "01111001")
      {
       CadenaDecoded += "y";
      }

if ( BitsDe8en8 == "01111010")
      {
       CadenaDecoded += "z";
      }

if ( BitsDe8en8 == "00110000")
      {
       CadenaDecoded += "0";
      }

if ( BitsDe8en8 == "00110001")
      {
       CadenaDecoded += "1";
      }

if ( BitsDe8en8 == "00110010")
      {
       CadenaDecoded += "2";
      }

if ( BitsDe8en8 == "00110011")
      {
       CadenaDecoded += "3";
      }

if ( BitsDe8en8 == "00110100")
      {
       CadenaDecoded += "4";
      }

if ( BitsDe8en8 == "00110101")
      {
       CadenaDecoded += "5";
      }

if ( BitsDe8en8 == "00110110")
      {
       CadenaDecoded += "6";
      }

if ( BitsDe8en8 == "00110111")
      {
       CadenaDecoded += "7";
      }

if ( BitsDe8en8 == "00111000")
      {
       CadenaDecoded += "8";
      }

if ( BitsDe8en8 == "00111001")
      {
       CadenaDecoded += "9";
      }

if ( BitsDe8en8 == "00101011")
      {
       CadenaDecoded += "+";
      }

if ( BitsDe8en8 == "00101111")
      {
       CadenaDecoded += "/";
      }

  contador_x = 0;
  BitsDe8en8 = "";
  }

  if ( contador_z == CadenaEnASCIIq2Tamanho )
  {
  mantenerseEnBucleq = false;
  }


} while (mantenerseEnBucleq == true)

document.write(CadenaDecoded);
alert (CadenaDecoded);

//Cerrar etiqueta javascript
</body>
</html>

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

@XSStringManolo

Cita de: Shell Root en  9 Agosto 2019, 23:09 PM
No entiendo nada de eso!  :silbar:
Ayer no me dio problemas en los test que hice, hoy me los está dando. Tengo que repararlo. Pondré alerts durante todo el proceso y ya voy viendo donde deja de imprimirse y lo arreglo.

Qué no entiendies? Lo que es base64 y ascii? Para que sirven? Como se pasa de base64 a ascii? Como he decidido hacerlo yo? O entiendes todo lo anterior pero no entiendes el código en sí, las funciones, el uso de cadenas, etc?

El proceso es pasar la cadena en base64 a ascii.
-Paso base64 letras a representación de la tabla en bits. Es decir:
A = 000000
B = 000001
Hasta hacer los 64 carácteres que se pueden representar con 6bits en binario.

-Uno todos los bits para tener una cadena tipo: AB = 000000000001
-Los divido de 8 en 8 para poder representarlos en ASCII. Son 255 posibles caracteres distintos representados con números del 0 al 255.
Eso es exacamente lo que puedes representar con los 8 bits.

-Una vez que tengo los bits de 8 en 8 los traduzco a su correspondiente valor númerico(este paso lo omito) y ese número numérico a su representación en la tabla ASCII.

Por alguna parte del proceso tengo que manejar ceros en el caso de que la cadena tenga en Base64 tenga el símbolo =.

Hay una explicación en el encoder de esa parte del proceso. Creo que en este código está mal implementado y necesito primero comprobar la cadena  en búsqueda del símbolo igual y en caso de encontrarlo añadir 2 ceros al final de la cadena por cada igual.

No sé si está ahí el error o antes. Lo encontraré fácil cuando lo mire.