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 l' -in
option lit stdin
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 copiez simplement la sortie codée en base64 dans le Presse-papiers sans les sauts de ligne.
-d
drapeau pour décoder.
openssl base64 -e <<< ram
et à décoder:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
fait. + @kenny on decode si l'entrée n'a pas de nouvelle ligne tous les 76 caractères au plus, y compris le cas de non-nouvelle ligne que je viens d'énoncer, vous avez besoin -d -A
ou vous obtiendrez des données manquantes ou corrompues sans message d'erreur (bien qu'un rapport de bogue en attente peut résulter en un correctif à cela).
openssl base64 -e <<< ram
code actuellement 4 octets, y compris un saut de ligne final ; voir hexdump <<< ram
.
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>
openssl base64 <<< input
base64
sans openssl
. Quoi qu'il en soit, je dois appuyer deux fois sur Ctrl + D. Et méfiez - vous, @Garret: Bash, avec ou sans openssl
, openssl base64 <<< superuser
et à openssl base64 <<< "superuser"
tort céder c3VwZXJ1c2VyCg==
, comme le « ici chaîne » comprend alors encore un saut de ligne! ( Apparemment, pas seulement dans Bash, mais aussi dans zsh, ksh et yash. Voir hexdump <<< superuser
. Le résultat en Base64 devrait être c3VwZXJ1c2Vy
.)
echo -n
est préférable si vous n'avez pas besoin de la nouvelle ligne. C'est certainement quelque chose à prendre en compte.
printf
à la place deecho -n
Essayez d'utiliser:
base64 -i <in-file> -o <outfile>
Il devrait être disponible par défaut sur OS X.
--decode
pour inverser le processus de base64 à la normale.
openssl base64
. Merci!
base64
Cette commande est disponible par défaut sur mon OS X 10.9.4.
Vous pouvez utiliser base64 <<< string
et base64 -D <<< string
pour coder et décoder une chaîne dans le terminal, ou base64 -in file
et base64 -D -in file
pour coder et décoder un fichier.
Invalid characer in input stream
lors de l'utilisation <<<
... J'ai essayé avec "
, '
et rien autour de la chaîne.
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 base64
commande:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
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 Run 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
imprimera sur stdout.
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
uuencode
n'est pas l'encodage en tant quebase64
Pour une raison quelconque, echo -n <data> | openssl base64
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
décoder a bien fonctionné.
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=
$
Alternativement, vous pouvez utiliser printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
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.
Une version simple de NodeJS:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(et maintenant base64
), venez avec le système d'exploitation.
recode devrait faire l'affaire pour vous
recode ../b64 < file.txt > file.b64
recode est disponible pour OS X via MacPorts .
base64
commander.
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.
Remarque : il n'y aura pas de sauts de ligne.
Nous avons compilé une liste de commandes shell multiplates-formes pour coder 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 le 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 demande d'extraction, dans laquelle nous souhaitions que les commandes d'interconnexion multiplates-formes codent en base64 une clé privée SSH afin de supprimer les nouvelles lignes.
base64 -d
ou enbase64 -D
fonction de votre système d'exploitation. OSX utilise-D
.