¿Por qué hay una inconsistencia en la salida de base64?


12

Estoy usando la base de datos de gráficos neo4j basada en Java en lubuntu 15.04.

El encabezado de autenticación HTTP neo4j utiliza la codificación base64 de 'nombre de usuario: contraseña' (sin incluir comillas). Usando wireshark puedo ver el código base64 generado por neo4j.

Sin embargo, si uso ubuntu coreutils base64 para codificar la misma cadena, obtengo una codificación ligeramente diferente. Esta codificación no es aceptada por neo4j.

Ambas codificaciones se decodifican con el nombre de usuario correcto: cadena de contraseña

Ejemplo

nombre de usuario = neo4jy contraseña =@N

Neo4j da el valor codificado de neo4j:@Ncomo bmVvNGo6QE4=que decodifica neo4j:@Ncomo se esperaba

$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N

Ubuntu coreutils base64devuelve el valor codificado de neo4j:@Nas bmVvNGo6QE4K(que difiere en el último carácter) pero aún decodifica correctamente;

$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N

¿Por qué es esto? ¿Qué necesito hacer para obtener una codificación consistente?


3
Tenga =en cuenta que en Base64 normal es relleno (y solo válido al final). El hecho de que una cadena codificada tenga relleno y la otra no (o de manera más general, que las dos cadenas tienen diferentes cantidades de relleno) es un claro indicio de que las dos son de diferente longitud y, por lo tanto, no pueden ser idénticas.
un CVn

Respuestas:


56

Estás codificando (ligeramente) diferentes cadenas:

$ echo 'bmVvNGo6QE4=' | base64 --decode | od -c
0000000   n   e   o   4   j   :   @   N
0000010
$ echo 'neo4j:@N' | od -c
0000000   n   e   o   4   j   :   @   N  \n
0000011

echoagrega un carácter de nueva línea al final. Esto lleva a diferentes codificaciones.

Utilice en su printflugar, cuya especificación de salida es más exacta:

$ printf '%s' 'neo4j:@N' | base64              
bmVvNGo6QE4=

10
Gran respuesta, votada. Tenga en cuenta que $ echo -n "neo4j:@N" | base64también funciona.
Doug Smythies

77
@DougSmythies lo hace, pero printfes mucho más consistente queecho .
muru
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.