Respuestas:
openssl
puede hacer esto por usted, y todo está instalado con OS X por defecto; no es necesario instalar darwinports.
$ openssl base64 -in <infile> -out <outfile>
Sin la -in
opción lee de stdin
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
o cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
para omitir la escritura en un archivo y simplemente copie la salida codificada en base64 al portapapeles sin los saltos de línea.
-d
bandera para decodificar.
openssl base64 -e <<< ram
y para decodificar:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
hace eso. + @kenny en decodificar si la entrada no tiene nueva línea cada 76 caracteres como máximo, incluido el caso sin líneas nuevas que acabo de decir, necesita -d -A
o obtendrá datos faltantes o corruptos sin mensaje de error (aunque hay un informe de error pendiente que puede resultar en una solución a eso).
openssl base64 -e <<< ram
realidad codifica 4 bytes, incluyendo un avance de línea final; ver hexdump <<< ram
.
Openssl se puede usar de manera más sucinta:
echo -n 'input' | openssl base64
[echo -n -> debe usarse, o la codificación se realizará incluyendo un nuevo carácter de línea]
o
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
sin openssl
. De cualquier manera, necesito presionar Ctrl + D dos veces. Y tenga cuidado, @Garret: en Bash, con o sin openssl
, openssl base64 <<< superuser
y ceda openssl base64 <<< "superuser"
erróneamentec3VwZXJ1c2VyCg==
, ya que la "cadena de aquí" aún incluye un avance de línea. ( Aparentemente no solo en Bash, sino también en zsh, ksh y yash. Ver hexdump <<< superuser
. El resultado de Base64 debería ser c3VwZXJ1c2Vy
).
echo -n
se prefiere si no necesita la nueva línea. Ciertamente es algo a tener en cuenta.
printf
en lugar deecho -n
Intenta usar:
base64 -i <in-file> -o <outfile>
Debería estar disponible por defecto en OS X.
--decode
para revertir el proceso de base64 a normal.
openssl base64
. ¡Gracias!
base64
El comando está disponible por defecto en mi OS X 10.9.4.
Se puede utilizar base64 <<< string
y base64 -D <<< string
para codificar y decodificar una cadena en el terminal, o base64 -in file
y base64 -D -in file
para codificar y descodificar un archivo.
Invalid characer in input stream
cuando uso <<<
... He intentado con "
, '
y nada alrededor de la cadena.
Dado que Python se proporciona con OS X de forma predeterminada, puede usarlo de la siguiente manera:
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
O instalar a coreutils
través de Brew ( brew install coreutils
) que proporcionará el base64
comando:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
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 le importa reutilizar el código en tantas otras plataformas de stock similares a UNIX como sea posible). Sin embargo, tenga cuidado porque no todas las variantes de UNIX admiten el modificador -m (iirc AIX sí, HP / UX sí, Solaris no).
$ 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
Use el modificador -m para uuencode file_in.txt por base64 como se especifica en RFC1521 y escríbalo en filename.b64 (con filename_when_uudecoded.txt como el nombre de archivo predeterminado cuando se decodifica):
uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
Ejemplo de STDIN:
cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
Python viene preinstalado en todos los Mac hoy en día.
En Terminal ejecutar python
(o ipython ).
Codificar un archivo:
base64data = open('myfile.jpg','rb').read().encode('base64')
open('myfile.txt','w').write(base64data)
Decodifica un archivo:
data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)
Por supuesto, ambas operaciones se pueden convertir en una línea, pero de esta manera es más legible.
## 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 -out
/ -output... filename
se imprimirá en stdout.
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
uuencode -m [-o output_file] [file] name
Donde nombre es el nombre que se 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
uuencode
no es la codificación comobase64
Por alguna razón, echo -n <data> | openssl base64
agregué una nueva línea en el medio de mis datos de base64. Supongo 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
decodificar funcionó bien.
Además de la respuesta anterior de Steve Folly, al encriptar en modo estándar, para evitar pasar nuevas líneas adicionales, presione CTRL + D dos veces para finalizar la entrada sin nuevas líneas adicionales. La salida se mostrará justo después de la misma línea.
Por ejemplo:
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
Alternativamente, puede usar printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
Hay Perl más MIME :: Base64:
perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'
Esto viene preinstalado. Puede especificar archivos separados en la línea de comando (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 hace una copia de seguridad de archivo1 en archivo1.txt, y escribe la salida codificada en Base-64 sobre el archivo original.
Una versión simple de NodeJS:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(y ahora base64
) viene con el sistema operativo.
recod debería hacer el truco para ti
recode ../b64 < file.txt > file.b64
recode está disponible para OS X a través de MacPorts .
base64
comando.
Si está base64 codificando un archivo de fuente, puede hacer esto:
base64 my-webfont.ttf > my-webfont.b64.ttf.txt
Lo uso en una Mac (10.10) todo el tiempo.
Nota : No habrá saltos de línea.
Compilamos una lista de comandos de shell multiplataforma para codificar un archivo como base64. Los siguientes comandos toman un archivo de entrada (nombrado deploy.key
en ejemplos) y lo convierten a base64 sin ningún ajuste de nueva línea. La salida base64 se imprime en el 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, agregue > base64-encoded.txt
(usando el nombre de archivo que elija).
Estos comandos fueron prototipados como parte de esta solicitud de extracción donde queríamos que los comandos de shell multiplataforma codificaran una clave privada SSH para eliminar las nuevas líneas.
base64 -d
obase64 -D
depende de su sistema operativo. Usos de OSX-D
.