Cifrado de datos en Base64

Cifrado de datos en Base64

Hace 2 días se me trono el router de la casa, así que me quede sin internet, pensé en a lo mejor descifrar una contraseña de algún router vecino, pero por desgracia parece ser que todos mis vecinos con internet inalámbrico se encuentran a una distancia considerable por lo que no tenía ninguna señal mayor al 20%.

En ese caso me tome la libertad y dedicación de escribir una explicación que desde hace tiempo he querido hacer y se trata del cifrado de datos en Base64, descuiden intentare ser lo más breve y explicativo posible para que puedan entender el concepto.

¿Qué es Base64?

Bueno como puede ser o no fácil de entender a simple vista, se trata de cifrar los datos basándose en un diccionario de 64 caracteres, es por eso que es Base64, el diccionario básico es igual a este:

1
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Este no es básicamente un diccionario estándar para el cifrado en Base 64, ya que la idea es tener 64 caracteres diferentes, pero antes de que empiecen a teclear todos los caracteres raros de su teclado terminen de leer la explicación. 😉

¿Cómo funciona el cifrado en Base 64?

Supongamos que tenemos un texto a cifrar en este caso será: El_Happy

Cada carácter representa un byte de información, que para la computadora cada byte es un conjunto de 8 bits, cada bit tiene un valor ya sea cero o uno, para los que no sepan la diferencia entre decimal y binario dejo una muy ligera explicación.

Para convertir el número binario 01100100 a decimal, se deben tomar los valores según su posición.

1
2
3
4
5
128    64    32    16    8    4    2    1
 
  0     1     1     0    0    1    0    0
 
64 + 32 + 4 = 100

Si tomamos los valores que están en 1 y los sumamos tendremos el valor decimal, en este caso seria 100

Para poder cifrar en Base 64 debemos tomar los primeros 3 caracteres y obtener su valor en binario.

1
2
3
    E        l        _ 
 
01000101 01101100 01011111

Después de obtener los valores tendremos 24 bits de información, que ahora pasaremos a dividir en partes de 6 bits, ya que si miran detenidamente la explicación anterior sobre binario a decimal se darán cuenta que con 6 bits obtenemos un valor entre 0 y 63, y con ese valor obtendremos un carácter de nuestro diccionario base.

1
2
3
010001 010110 110001 011111
 
   R      W      x      f

De esta forma habremos pasado con éxito un texto sin cifrar a un texto cifrado en Base 64, pero si se han dado cuenta, esto funciona fácilmente cuando tenemos 24 bits de información, ¿Qué pasaría si tenemos menos?

Bueno la respuesta es sencilla, para cada conjunto de 6 bits a los cuales les falten valores se rellenan con ceros y para los conjuntos que no obtuvieron valores se llenan con el signo = que representa a un espacio vacío.

Cifrando la palabra El_Happy se puede explicar este punto sin tanta teoría.

1
2
3
4
5
6
7
    E        l        _          H        a        p          p        y
 
01000101 01101100 01011111   01001000 01100001 01110000   01110000 01111001 --------
 
010001 010110 110001 011111  010010 000110 000101 110000  011100 000111 1001-- ------
 
   R      W      x      f       S      G      F      w       c      H      k      =

¿Cómo se descifra el Base64?

Bueno para el descifrado solo tenemos que hacer los mismos pasos pero hacia atrás.

Eso quiere decir que primero debemos obtener la posición de un carácter en nuestro diccionario base, después obtener el número binario en 6 dígitos, unir cada 4 conjuntos para obtener 24 bits y después dividirlo en 8 bits, para por fin tomar el valor ASCII y poder obtener el carácter correspondiente.

Se que la mitad puso cara de ya entendí como se hace y los demás han puesto cara de me confundiste mas, pero para eso está el ejemplo.

1
2
3
4
5
6
7
   R      W      x      f       S      G      F      w       c      H      k      =
 
010001 010110 110001 011111  010010 000110 000101 110000  011100 000111 1001-- ------
 
01000101 01101100 01011111   01001000 01100001 01110000   01110000 01111001
 
    E        l        _          H        a        p          p        y

¿Para qué me sirve saber esta información?

Bueno, en mi caso busque esta información solo por curiosidad ya que si se dedican a programar sabrán que en la mayoría de los lenguajes ya existe una función que se encarga de cifrar y descifrar en Base64.

Pero si le ponemos un poco de imaginación, puedes lograr crear tu propio cifrado de datos en Base64, si solo cambias tu diccionario por otros 64 caracteres que no se repitan e incluso puedes cambiar el signo de = y tener tu propia implementación de este algoritmo de cifrado.