¿Cuál es el propósito de la codificación base 64 y por qué se usa en la autenticación básica HTTP?

129

No obtengo el cifrado Base64.

Si uno puede descifrar una cadena Base64, ¿cuál es su propósito?

¿Por qué se usa para la autenticación básica HTTP?

Es como decirle a alguien que mi contraseña se invierte en OLLEH.

Las personas que vean OLLEH sabrán que la contraseña original era HOLA.

ajsie
fuente
10
base64 no es un cifrado, es una codificación
n611x007

Respuestas:

248

Base64 no es cifrado, es una codificación. Es una forma de representar datos binarios utilizando solo caracteres imprimibles (texto).

Consulte este párrafo de la página de Wikipedia para la autenticación básica HTTP :

Si bien la codificación del nombre de usuario y la contraseña con el algoritmo Base64 generalmente los hace ilegibles a simple vista, se decodifican tan fácilmente como se codifican. La seguridad no es la intención del paso de codificación. Más bien, la intención de la codificación es codificar caracteres no compatibles con HTTP que pueden estar en el nombre de usuario o contraseña en aquellos que son compatibles con HTTP.

Matt Bridges
fuente
44
Además, parece que la codificación de caracteres relevante para obtener los 'datos binarios' de la cadena debe ser iso-8859-1 . ( fuente )
Myobis
60

¡Normalmente se llama codificación base64, no cifrado! Lo bueno de la codificación base64 es que le permite representar datos (binarios) utilizando solo un subconjunto limitado y común de los caracteres disponibles, mucho más eficiente que simplemente escribir una cadena de 1s y 0s como ASCII, por ejemplo.

Flexo
fuente
66
+1, pero la comparación con el almacenamiento de datos en 1s, 0s stream es demasiado exagerada. Es mejor compararlo con el almacenamiento de datos en formato hexadecimal. Debido a que hexadecimal solo generará x2más bytes que la secuencia original, y 1s, 0s, hace que x8veces más bytes. (Y Base64 genera x1.3más datos que la matriz de bytes original). Entonces, a veces es aceptable codificar la secuencia binaria como una cadena hexadecimal, duplicando la cantidad de bytes, por ejemplo, solo para almacenar el hash de contraseña en la base de datos.
Agnius Vasiliauskas
30

En crypt ion requiere una clave (cadena o algoritmo) para descifrar; de ahí la "cripta" (raíz: criptografía )

En Cod ing modifica las / los cambios / cambia un código de caracteres en otra. En este caso, los bytes de datos habituales ahora se pueden representar y transportar fácilmente mediante HTTP.

vol7ron
fuente
55
Cifrado solo significa "hacer oculto": la criptografía basada en claves es un invento muy reciente. El cifrado es una forma de codificación que se ha utilizado como cifrado (aunque no lo haya hecho ninguna persona mayor de 12 años durante cientos de años).
2
El cifrado en lengua vernácula se utiliza para referirse a los modos recientes de cifrado, específicamente el cifrado por computadora, que está basado en claves (clave pública / privada). Si bien es cierto, no es necesario señalar una definición literal de una palabra fechada; de lo contrario, estaría discutiendo la definición histórica de muchas palabras en inglés que se usan hoy en día. Los vernáculos (ya veces coloquiales) son los que dan contexto a las palabras y, por lo tanto, su definición.
vol7ron
1
No creo que sonara grosero; Estoy de acuerdo con su punto sobre el contexto moderno. Las palabras y las definiciones están en constante evolución. Creo que "codificar" y "cifrar" definitivamente tienen dos definiciones muy distintas en la informática moderna y su respuesta hace un buen esfuerzo para resumir las diferencias.
Dan Bechard
La codificación Base64 es una forma de ofuscación, que simplemente significa que no está clara. Para muchas aplicaciones, este es un cifrado suficiente donde el objetivo es simplemente destruir cualquier texto claro enviado por un cable, por ejemplo.
Dominic Cerisano
66
@DominicCerisano: No, la codificación base64 no cuenta como cifrado, y espero que no la esté utilizando para proteger nada.
Ry-
19

En el lenguaje cotidiano, un "código" es algo secreto. En ciencia e ingeniería, un código es simplemente un acuerdo, un conjunto de reglas, de cómo escribir algo.

Ese código puede ser secreto. En ese caso, se llama cifrado. Pero en general, un código no es secreto. Toma el código genético. Simplemente dice que nuestro ADN está construido a partir de cuatro bases diferentes -  A, C, GyT y que tres bases tomados juntos forman un amino ácido. También hay una tabla de las cuales tres letras forman cada aminoácido.

No hay nada secreto sobre este código.

Del mismo modo, Base64 no es un código secreto. Más bien, es un código que permite almacenar datos en seis bits por carácter (por lo tanto, hay 64 entidades diferentes, es decir, la "base" del sistema es 64, al igual que la base de nuestro sistema decimal es 10, ya que hay 10 entidades diferentes llamados "dígitos").

Konrad Rudolph
fuente
18

Puede querer decir "Codificación Base 64". El cifrado no es lo mismo que la codificación.

Wikipedia: Cifrado

Andy
fuente
17

La codificación Base-64 es parte de las especificaciones MIME. Proporciona un transporte seguro codificación para el de datos que no se masticarán si se transmiten a través de un host que utiliza un esquema de codificación diferente al utilizado por el cliente original.

Hay muchos hosts diferentes en los intertubes y realmente no puede asumir el soporte para nada más que ASCII de 7 bits, sin correr el riesgo de pérdida de datos / confusión.

Los mainframes de IBM, por ejemplo, usan una codificación llamada EBCDIC (que viene en muchos sabores diferentes). Sus puntos de código son completamente diferentes de los puntos de código utilizados por los 'puters' basados ​​en ASCII: en ASCII, las letras AZ son 0x41 - 0x5A; en EBCDIC las letras A - Z ni siquiera son un rango contiguo: las letras AI viven en 0xC1 - 0xC9, las letras JR viven en 0xD1 - 0xD9 y las letras SZ viven en 0xE2 - 0xE9.

Nicholas Carey
fuente
0

De manera predeterminada, los parámetros del campo del encabezado del mensaje en los mensajes del Protocolo de transferencia de hipertexto (HTTP) no pueden llevar caracteres fuera del conjunto de caracteres ISO-8859-1.

Si el nombre de usuario y la contraseña contienen un conjunto de caracteres incompatible, HTTP no podrá transportar ese texto. Para evitar esto, codificamos el nombre de usuario y la contraseña con base64 para asegurarnos de que estamos enviando caracteres compatibles con HTTP a través de HTTP. Para obtener más información, consulte esta autenticación_acceso_básico

Varun
fuente