2010-03-16 23:15:37 +0000 2010-03-16 23:15:37 +0000
243
243

¿Cómo codificar base64 a través de la línea de comandos?

¿Existe un comando de terminal en Mac OS X que codifique un archivo o stdin en base64?

Respuestas (17)

252
252
252
2010-03-17 00:25:08 +0000

openssl puede hacer esto por ti, y está todo instalado con OS X por defecto; no hay necesidad de instalar darwinports.

$ openssl base64 -in <infile> -out <outfile>

Sin la opción -in lee desde stdin

107
107
107
2010-04-21 06:12:44 +0000

Openssl puede ser usado más sucintamente:

echo -n 'input' | openssl base64

[eco -n -> debe ser usado, o la codificación se hará incluyendo un nuevo carácter de línea]

o

openssl base64 <ENTER> [type input] <CTRL+D>
54
54
54
2015-02-27 20:13:36 +0000

Intenta usar:

base64 -i <in-file> -o <outfile>

Debería estar disponible por defecto en OS X.

34
34
34
2016-03-17 02:48:49 +0000

El comando base64 está disponible por defecto en mi OS X 10.9.4.

Puedes usar base64 <<< string y base64 -D <<< string para codificar y decodificar una cadena en la terminal, o base64 -in file y base64 -D -in file para codificar y decodificar un archivo.

16
16
16
2017-08-01 05:33:00 +0000

En macOS siempre uso:

echo -n "STRING" | base64

-n es para evitar un nuevo carácter de línea al final de la línea.

8
8
8
2015-05-25 17:19:49 +0000

Dado que Python está provisto de OS X por defecto, puedes usarlo como se indica a continuación:

$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO

O instalar coreutils vía Brew (brew install coreutils) que proveerá el comando base64:

$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
5
5
5
2012-09-05 07:43:32 +0000

En términos de velocidad, usaría openssl seguido de perl, seguido de uuencode. En términos de portabilidad, usaría uuencode seguido de Perl seguido de openssl (Si te preocupa reutilizar el código en tantas otras plataformas de stock como sea posible en UNIX). Pero ten cuidado porque no todas las variantes de UNIX soportan el switch -m (iirc AIX lo hace, HP/UX lo hace, Solaris no lo hace).

$ time perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' \
> out.jpg 1>filename.b64
real 0m0.025s

$ time uuencode -m -o filename.b64 out.jpg filename_when_uudecoded.txt
real 0m0.051s

$ time openssl base64 -in out.jpg -out filename.b64 
real 0m0.017s

Usa el switch -m para el archivo uuencode_in. txt por base64 como se especifica en RFC1521 y escríbelo a nombre de archivo.b64 (con nombre de archivo_cuando_uudecoded.txt como nombre de archivo por defecto cuando se decodifica):

uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt

STDIN ejemplo:

cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
5
5
5
2016-07-12 15:39:22 +0000

También puedes ponerlo directamente en el portapapeles (al menos en mac):

openssl base64 -in [filename] | pbcopy

3
3
3
2014-06-17 10:00:25 +0000

Python

Python viene preinstalado en todos los macs de hoy en día.

En la Terminal ejecute python (o ipython ).

Codifique un archivo:

base64data = open('myfile.jpg','rb').read().encode('base64')
 open('myfile.txt','w').write(base64data)

Decodifique un archivo:

data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)

Por supuesto, ambas operaciones pueden ser convertidas en un oneliner pero de esta manera es más legible.

OpenSSL

## encode to base64 (on OSX use `-output`)
openssl base64 -in myfile.jpg -output myfile.jpg.b64

## encode to base64 (on Linux use `-out`)
openssl base64 -in myfile.jpg -out myfile.jpg.b64

## decode from base64 (on OSX `-output` should be used)
openssl base64 -d -in myfile.jpg.b64 -output myfile.jpg

## decode from base64 (on Linux `-out` should be used)
openssl base64 -d -in myfile.jpg.b64 -out myfile.jpg

Omitiendo el -out/-output... filename se imprimirá a stdout.

base64

Otra utilidad ootb presente tanto en OSX como en Ubuntu:

## encode to base64
base64 < myfile.jpg > myfile.jpg.b64

## decode from base64 (OSX) (note the uppercase 'D')
base64 -D < myfile.jpg.b64 > myfile.jpg

## decode from base64 (Linux) (note the lowercase 'd')
base64 -d < myfile.jpg.b64 > myfile.jpg
2
2
2
2014-07-27 05:16:22 +0000

Por alguna razón, echo -n <data> | openssl base64 añadió una nueva línea en medio de mis datos de base64. Asumo que fue porque mis datos de base64 eran realmente largos.

Usar echo -n <data> | base64 para codificar y echo -n <base64-ed data> | base64 -D para decodificar funcionó bien.

2
2
2
2013-04-04 20:12:06 +0000
uuencode -m [-o output_file] [file] name

Donde nombre es el nombre a mostrar en el encabezado codificado.

Ejemplo:

cat docbook-xsl.css | uuencode -m docbook-xsl.css

o

uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
2
2
2
2016-07-27 18:14:32 +0000

Además de la respuesta de Steve Folly arriba, al cifrar en modo stdin, para evitar pasar nuevas líneas adicionales, presione CTRL+D dos veces para terminar la entrada sin ninguna línea adicional. La salida se mostrará justo después de la misma línea.

Por ejemplo:

$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$

Alternativamente, podrías usar printf:

$ printf 'input' | openssl base64
aW5wdXQ=
$
1
1
1
2010-03-17 04:24:21 +0000

Hay Perl más MIME::Base64:

perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'

Esto viene pre-instalado. Puede especificar archivos separados en la línea de comandos (o suministrar los datos en la entrada estándar); cada archivo está codificado por separado. También puedes hacer:

perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1

Esto respalda el archivo1 al archivo1.txt, y escribe la salida codificada en Base64 sobre el archivo original.

1
1
1
2016-04-18 22:13:21 +0000

Si estás codificando un archivo de fuente en base64, puedes hacer esto:

base64 my-webfont.ttf > my-webfont.b64.ttf.txt

Uso esto en un Mac (10.10) todo el tiempo.

Nota : No habrá saltos de línea.

1
1
1
2010-03-17 00:00:24 +0000

La recodificación debe hacer el truco por ti… La recodificación está disponible para OS X a través de MacPorts .

1
1
1
2019-07-08 16:00:26 +0000

Soluciones multiplataforma

Compilamos una lista de comandos de shell multiplataforma para codificar un archivo como base64. Los siguientes comandos toman un archivo de entrada (llamado deploy.key en los ejemplos) y lo convierten a base64 sin ninguna nueva línea de envoltura. La salida de base64 se imprime en la terminal a través de stdout.

# For systems with openssl
openssl base64 -A -in=deploy.key

# For systems with Python (2 or 3) installed
python -c "import base64; print(base64.standard_b64encode(open('deploy.key', 'rb').read()).decode())"

# For Windows or Linux systems that have the GNU coreutils base64 command
base64 --wrap=1000000 deploy.key

# For macOS systems
base64 --break=1000000 deploy.key

Para redirigir la salida a un archivo, añade > base64-encoded.txt (usando un nombre de archivo de tu elección).

Estos comandos fueron prototipados como parte de esta solicitud pull donde queríamos que los comandos shell multiplataforma para base64 codificaran una clave privada SSH para eliminar las nuevas líneas.

1
1
1
2015-03-27 13:09:24 +0000

Una simple versión de NodeJS:

node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"