Question Comment encoder base64 via la ligne de commande?


Existe-t-il une commande de terminal sous Mac OS X sur laquelle base64 encodera un fichier ou un fichier stdin?


155
2018-03-16 23:15


origine


Sachez que bien que la syntaxe de codage base64 soit cohérente d’un système d’exploitation à un autre, la syntaxe de décodage base64 est soit base64 -d ou base64 -D en fonction de votre système d'exploitation. OSX utilise -D. - Chris Johnson
@ChrisJohnson Si utilisé de concert avec openssl le drapeau pour le décodage est -d sur OS X (10.10 Yosemite). - ᴠɪɴᴄᴇɴᴛ


Réponses:


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 le -in option lit à partir de stdin


175
2018-03-17 00:25



Utilisation openssl base64 < path/to/file.png | tr -d '\n' | pbcopy ou cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy pour ignorer l'écriture dans un fichier et simplement copier la sortie encodée en base64 dans le presse-papiers sans les sauts de ligne. - Mathias Bynens
Et utiliser un -d drapeau à décoder. - kenny
Dans mac, To base64 encoder une chaîne: openssl base64 -e <<< ram et décoder: openssl base64 -d <<< cmFtCg== - Ram Patra
@mathias si vous ne voulez pas de nouvelles lignes openssl base64 [-e] -A est-ce que. + @kenny sur le décodage si l’entrée n’a pas de retour à la ligne tous les 76 caractères au maximum, y compris l’affaire no-newlines que je viens d’indiquer, il vous faut -d -A ou vous obtiendrez des données manquantes ou corrompues sans message d'erreur (bien qu’il y ait un rapport de bogue en attente qui pourrait entraîner une correction). - dave_thompson_085
@RAM, openssl base64 -e <<< ram encode réellement 4 octets, y compris un fil de fin de ligne; voir hexdump <<< ram. - Arjan


Openssl peut être utilisé plus succinctement:

echo -n 'input' | openssl base64

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

ou

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

60
2018-04-21 06:12



La solution "echo" ajoute cependant un caractère LF (saut de ligne) à la fin de la chaîne d'entrée. Meilleure utilisation: echo -n 'input' - SuperTempel
Et même un peu plus succinct openssl base64 <<< input - Garrett Fogerlie
Ou simplement utiliser base64 sans pour autant openssl. De toute façon, je dois appuyer sur Ctrl + D deux fois. Et méfiez-vous, @Garret: dans Bash, avec ou sans openssl, openssl base64 <<< superuser et openssl base64 <<< "superuser"  à tort rendement c3VwZXJ1c2VyCg==, comme la "chaîne ici" inclut alors toujours un saut de ligne! (Apparemment non seulement dans Bash, mais aussi dans zsh, ksh et yash. Voir hexdump <<< superuser. Le résultat Base64 doit être c3VwZXJ1c2Vy.) - Arjan
@Arjan J'hésiterais à utiliser le mot "par erreur" - comme vous l'avez souligné, la chaîne ici contient un saut de ligne, mais pour cause - unix.stackexchange.com/questions/20157/... . echo -n est préférable si vous n'avez pas besoin de la nouvelle ligne. C'est certainement quelque chose dont il faut être conscient. - Steve Folly
Vous pourriez utiliser printf au lieu de echo -n - Jason S


Essayez d'utiliser:

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

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


31
2018-02-27 20:13



Génial. simple et élégant. Merci! - Leon li


base64 la commande 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.


21
2018-03-17 02:48



Avez-vous un exemple? Je reçois Invalid characer in input stream en utilisant <<<... j'ai essayé avec ", ' et rien autour de la ficelle. - Jonas
@Jonas Dans quelle coquille êtes-vous? Vous pouvez l'utiliser dans bash et zsh. - WKPlus
Ah bon sang, ça marche! - Jonas


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 tenez à réutiliser le code sur autant d'autres plates-formes UNIX que possible). Attention cependant, car toutes les variantes UNIX ne prennent pas en charge le commutateur -m (ce que fait Iirc AIX, HP / UX, pas Solaris).

$ 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 lorsqu'il est décodé):

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
2017-09-05 07:43





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 Brasser (brew install coreutils) qui fournira base64 commander:

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

5
2018-05-25 17:19





Vous pouvez également le diriger directement vers le presse-papier (au moins sur Mac):

openssl base64 -in [filename] | pbcopy


4
2017-07-12 15:39



golf: base64 < [filename] | pbcopy - totels


uuencode -m [-o output_file] [file] name

pré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
2018-04-04 20:12



uuencode n'est pas le codage comme base64 - ccpizza


Pour certaines raisons, echo -n <data> | openssl base64 ajouté une nouvelle ligne au milieu de mes données base64. Je suppose que c'est parce que mes données base64 étaient très longues.

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


2
2017-07-27 05:16



nb: sur mon nix, je devais utiliser -d echo -n c29tZXVzZXI6c29tZXBhc3N3b3Jk | base64 -d someuser: somepassword - mlo55