Existe-t-il une commande de terminal sous Mac OS X qui va coder en base64 un fichier ou stdin?
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
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>
Essayez d'utiliser:
base64 -i <in-file> -o <outfile>
Il devrait être disponible par défaut sur OS X.
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.
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
Vous pouvez également le diriger vers le presse-papiers (au moins sur mac):
openssl base64 -in [filename] | pbcopy
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
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.
## 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.
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
uuencode -m [-o output_file] [file] name
Où 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
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é.
Une version simple de NodeJS:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
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.
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.
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=
$
Sur macOS, j'utilise toujours:
echo -n "STRING" | base64
-n est d'éviter un nouveau caractère de ligne à la fin de la ligne.
recode devrait faire l'affaire pour vous
recode ../b64 < file.txt > file.b64
recode est disponible pour OS X via MacPorts .