Me gustaría escribir un script bash para decodificar una cadena base64. Por ejemplo, escribo decode QWxhZGRpbjpvcGVuIHNlc2FtZQ== y se imprime Aladdin:open sesame y vuelve al indicador.
Hasta ahora he probado un simple archivo bash que contiene python -m base64 -d $1 pero este comando espera un nombre de archivo, no una cadena. ¿Hay otro comando no interactivo (no necesariamente en un módulo de Python) que pueda ejecutar desde la línea de comandos para lograr esto, sin tener que instalar ningún paquete adicional? (O si lo hago, algo súper mínimo.)
EDITAR: Un ejemplo en el que la cadena codificada en base64 termina en varias líneas:
$ openssl enc -base64 <<< 'And if the data is a bit longer, the base64 encoded data will span multiple lines.'QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNvZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=$ openssl enc -base64 -d << EOF> QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv> ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=> EOFAnd if the data is a bit longer, the base64 encoded data will span multiple lines.
openssl base64 -e <<< 'Welcome to openssl wiki' V2VsY29tZSB0byBvcGVuc3NsIHdpa2kKopenssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'Welcome to openssl wiki
advertencia la longitud de línea base64 está limitada a 64 caracteres de forma predeterminada en openssl :
openssl base64 -e <<< 'Welcome to openssl wiki with a very long line that splits...' V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo YXQgc3BsaXRzLi4uCg==openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='
>= NADA !
para poder decodificar una línea base64 sin avance de línea que exceda los 64 caracteres, use la opción-A :
openssl base64 -d -A <<<'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='Welcome to openssl wiki with a very long line that splits...
De todos modos, es mejor dividir el resultado base64 en líneas de 64 caracteres, ya que la opción-A tiene errores ( límite con archivos largos ).
Tuve unos momentos de tirones de pelo en este porque el base64 Herramienta de Linux y también el openssl puede decodificar, de hecho. Pero tengo este archivo codificado en base64 en particular que se decodifica a un valor ligeramente incorrecto. Los pocos bytes coinciden, pero luego está esta presencia de EF BF BD EF BF BD cuando veo en hexedit espectador. Y luego la siguiente secuencia de bytes coincide de nuevo cuando se compara con la salida esperada decodificada correctamente. Esta extraña secuencia de bytes se insertó en los intermedios, en algún momento como EF BF BD solo.
Para resolver el asunto, tengo que ver cómo lo codifica el remitente de Java y luego creé un pequeño decodificador java base64. Y ahora puedo decodificar al valor esperado.