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

Comment encoder base64 via la ligne de commande ?

Existe-t-il une commande de terminal sous Mac OS X qui permet d'encoder base64 dans un fichier ou un stdin ?

Réponses (17)

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

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 depuis stdin

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

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

echo -n 'input' | openssl base64

[echo -n -> doit être utilisé, ou l'encodage sera fait en incluant le nouveau caractère de ligne]

ou

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

Essayez d'utiliser :

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

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

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

La commande base64 est disponible par défaut sur mon 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.

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

Sur macOS, j'utilise toujours :

echo -n "STRING" | base64

-n pour éviter un nouveau caractère de fin de ligne.

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

Puisque Python est fourni avec OS X par défaut, vous pouvez l'utiliser comme ci-dessous :

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

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

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

En termes de vitesse, j'utiliserais openssl suivi de perl, suivi de uuencode. En termes de portabilité, j'utiliserais uuencode suivi de Perl suivi de openssl (si vous souhaitez réutiliser le code sur autant de plateformes UNIX que possible). Attention cependant, car toutes les variantes d'UNIX ne supportent pas le commutateur -m (iirc AIX le supporte, HP/UX le supporte, 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 le fichier uuencode_in. txt par base64 comme spécifié par RFC1521 et l'écrire dans filename.b64 (avec filename_when_uudecoded.txt comme nom de fichier par défaut lorsqu'il est décodé) :

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

STDIN exemple :

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

Vous pouvez également l'envoyer directement dans le presse-papiers (au moins sur Mac) :

openssl base64 -in [filename] | pbcopy

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

Python

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

En exécution Terminal 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 une seule ligne mais de cette façon, c'est plus lisible.

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 imprimera sur stdout.

base64

Un autre utilitaire ootb présent à la fois dans 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
2
2
2
2014-07-27 05:16:22 +0000

Pour une raison quelconque, echo -n <data> | openssl base64 a ajouté une nouvelle ligne au milieu de mes données de base64. Je suppose que c'est 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
2
2
2013-04-04 20:12:06 +0000
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
2
2
2016-07-27 18:14:32 +0000

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

Par exemple :

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

Alternativement, vous pouvez utiliser printf :

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

Il y a Perl plus MIME::Base64 :

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

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

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

Ceci sauvegarde le fichier1 dans le fichier1.txt, et écrit la sortie encodée en Base-64 sur le fichier original.

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

Si vous encodez en base64 un fichier de police, vous pouvez faire ceci :

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

J'utilise ceci sur un Mac (10.10) tout le temps.

Note : Il n'y aura pas de retour à la ligne.

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

recode devrait faire l'affaire pour vous

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

recode est disponible pour OS X via MacPorts .

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

Solutions multi-plateformes

Nous avons compilé une liste de commandes shell multi-plateformes pour encoder un fichier en tant que base64. Les commandes suivantes prennent un fichier d'entrée (nommé deploy.key dans les exemples) et le convertissent en base64 sans aucun retour à la ligne. La sortie base64 est imprimée sur le terminal via 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

Pour rediriger la sortie vers un fichier, ajoutez > base64-encoded.txt (en utilisant un nom de fichier de votre choix).

Ces commandes ont été prototypées dans le cadre de cette pull request où nous voulions que les commandes shell multi-plateformes codent en base64 une clé privée SSH pour supprimer les nouvelles lignes.

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

Une version simple de NodeJS :

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