web-dev-qa-db-fra.com

Comment encoder base64 en ligne de commande?

Existe-t-il une commande de terminal sous Mac OS X qui va coder en base64 un fichier ou stdin?

195
Josh

openssl peut le faire pour vous, et tout est installé avec OS X par défaut; pas besoin d'installer darwinports.

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

Sans l'option -in, lit à partir de stdin

211
Steve Folly

Openssl peut être utilisé de manière plus succincte:

echo -n 'input' | openssl base64

[echo -n -> doit être utilisé, sinon l'encodage sera effectué avec un nouveau caractère de ligne]

ou

openssl base64 <ENTER> [type input] <CTRL+D>
82
Glen

Essayez d'utiliser:

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

Il devrait être disponible par défaut sur OS X.

47
Derreck Dean

La commande base64 est disponible par défaut sous OS X 10.9.4.

Vous pouvez utiliser base64 <<< string et base64 -D <<< string pour encoder et décoder une chaîne dans le terminal, ou base64 -in file et base64 -D -in file pour encoder et décoder un fichier.

28
WKPlus

Python étant fourni avec OS X par défaut, vous pouvez l’utiliser comme suit:

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

Ou installez coreutils via Brew (brew install coreutils) qui fournira la commande base64:

$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
7
kenorb

Vous pouvez également le diriger vers le presse-papiers (au moins sur mac):

openssl base64 -in [filename] | pbcopy

5
Steve

En termes de vitesse, j'utiliserais openssl suivi de Perl, suivi de uuencode. Pour ce qui est de la portabilité, j'utiliserais uuencode suivi de Perl suivi de openssl (si vous tenez à ce que le code soit réutilisé sur autant d'autres plates-formes UNIX que stock, comme possible). Soyez prudent, car toutes les variantes UNIX ne prennent pas en charge le commutateur -m (iirc AIX, HP/UX, Solaris non).

$ 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

Utilisez le commutateur -m pour uuencode file_in.txt par base64 comme spécifié par RFC1521 et écrivez-le dans filename.b64 (avec filename_when_uudecoded.txt comme nom de fichier par défaut lors du décodage):

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

Exemple STDIN:

cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
5
phiz

Python

Python est préinstallé sur tous les macs de nos jours.

Dans Terminal, exécutez python (ou ipython ).

Encoder un fichier:

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

Décoder un fichier:

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

Bien sûr, les deux opérations peuvent être converties en un seul élément, mais de cette manière, elles sont plus lisibles.

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

Omettre le -out/-output... filename sera imprimé sur la sortie standard.

base64

Un autre utilitaire ootb présent à la fois sous OSX et 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
3
ccpizza
uuencode -m [-o output_file] [file] name

nom est le nom à afficher dans l'en-tête codé.

Exemple:

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

ou

uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
2
user214207

Pour une raison quelconque, echo -n <data> | openssl base64 a ajouté une nouvelle ligne au milieu de mes données base64. Je suppose que c'était parce que mes données base64 étaient vraiment longues.

Utiliser echo -n <data> | base64 pour encoder et echo -n <base64-ed data> | base64 -D pour décoder a bien fonctionné.

2
Heath Borders

Une version simple de NodeJS:

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

Il y a Perl plus MIME :: Base64:

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

Cela vient pré-installé. Vous pouvez spécifier des fichiers distincts sur la ligne de commande (ou fournir les données sur une entrée standard); chaque fichier est encodé séparément. Vous pouvez aussi faire:

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

Cela sauvegarde fichier1 dans fichier1.txt et écrit la sortie codée en base 64 sur le fichier d'origine.

1
Jonathan Leffler

Si vous codez en base64 un fichier de police, procédez comme suit:

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

Je l'utilise sur un Mac (10.10) tout le temps.

Note : Il n'y aura pas de sauts de ligne.

1
Chuck Ugwuh

En plus de la réponse de Steve Folly ci-dessus, lors du chiffrement en mode stdin, pour éviter de passer de nouvelles lignes, appuyez deux fois sur CTRL + D pour mettre fin à la saisie sans nouvelles lignes. La sortie s'affichera juste après la même ligne.

Par exemple:

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

Vous pouvez également utiliser printf:

$ printf 'input' | openssl base64
aW5wdXQ=
$
1
bigT

Sur macOS, j'utilise toujours:

echo -n "STRING" | base64

-n est d'éviter un nouveau caractère de ligne à la fin de la ligne.

1
patrickS

recode devrait faire l'affaire pour vous

recode ../b64 < file.txt > file.b64

recode est disponible pour OS X via MacPorts .

1
heavyd