Sachez que même si la syntaxe base64 codant est cohérente d'un OS à l' autre, la syntaxe base64-décodage est soit base64 -dou en base64 -Dfonction de votre système d'exploitation. OSX utilise -D.
Chris Johnson
@ChrisJohnson Si utilisé de concert avec opensslle drapeau pour le décodage est -dsur OS X (10.10 Yosemite).
ᴠɪɴᴄᴇɴᴛ
Réponses:
232
opensslpeut le faire pour vous, et tout est installé avec OS X par défaut; pas besoin d'installer darwinports.
Utilisez openssl base64 < path/to/file.png | tr -d '\n' | pbcopyou cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopypour ignorer l'écriture dans un fichier et copiez simplement la sortie codée en base64 dans le Presse-papiers sans les sauts de ligne.
Mathias Bynens le
3
Et utilisez un -ddrapeau pour décoder.
Kenny
5
Sous mac, Pour coder en base64 une chaîne: openssl base64 -e <<< ramet à décoder:openssl base64 -d <<< cmFtCg==
Ram Patra
8
@mathias si vous ne voulez pas de nouvelles lignes le openssl base64 [-e] -Afait. + @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 -Aou 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).
dave_thompson_085
2
@Ram, openssl base64 -e <<< ramcode actuellement 4 octets, y compris un saut de ligne final ; voir hexdump <<< ram.
Arjan
93
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]
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
8
Et même un peu plus succinctopenssl base64 <<< input
Garrett Fogerlie
2
Ou simplement utiliser base64sans 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 <<< superuseret à 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.)
Arjan
@ Arjan J'hésiterais à utiliser le mot "par erreur" - comme vous l'avez fait remarquer, la chaîne here inclut un saut de ligne, mais pour une bonne raison - unix.stackexchange.com/questions/20157/… . echo -nest préférable si vous n'avez pas besoin de la nouvelle ligne. C'est certainement quelque chose à prendre en compte.
Ajouter --decodepour inverser le processus de base64 à la normale.
LuckyDonald
1
C'est mieux pour l'encodage pour SVG car cela crée une ligne. Ceci est plus propre que la sortie de openssl base64. Merci!
Shanimal
32
base64 Cette commande est disponible par défaut sur mon OS X 10.9.4.
Vous pouvez utiliser base64 <<< stringet base64 -D <<< stringpour coder et décoder une chaîne dans le terminal, ou base64 -in fileet base64 -D -in filepour coder et décoder un fichier.
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):
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... filenameimprimera sur stdout.
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
Pour une raison quelconque, echo -n <data> | openssl base64ajouté 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> | base64pour encoder et echo -n <base64-ed data> | base64 -Ddécoder a bien fonctionné.
nb: sur mon nix, j'ai du utiliser -d echo -n c29tZXVzZXI6c29tZXBhc3N3b3Jk | base64 -d someuser: somepassword
mlo55
2
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.
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:
Je ne pense pas que ce soit une meilleure réponse car openssl(et maintenant base64), venez avec le système d'exploitation.
Josh
Au risque de couper les cheveux en quatre - et je suis consciente que cette critique s’applique également à quelques autres réponses - la question demandait comment coder un fichier ou stdin . Si je ne me trompe pas, votre réponse montre seulement comment encoder une chaîne.
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.keydans 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
.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.Sans l'
-in
option lit stdinla source
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
oucat 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 ; voirhexdump <<< ram
.Openssl peut être utilisé de manière plus succincte:
[echo -n -> doit être utilisé, sinon l'encodage sera effectué avec un nouveau caractère de ligne]
ou
la source
openssl base64 <<< input
base64
sansopenssl
. Quoi qu'il en soit, je dois appuyer deux fois sur Ctrl + D. Et méfiez - vous, @Garret: Bash, avec ou sansopenssl
,openssl base64 <<< superuser
et àopenssl base64 <<< "superuser"
tort céderc3VwZXJ1c2VyCg==
, comme le « ici chaîne » comprend alors encore un saut de ligne! ( Apparemment, pas seulement dans Bash, mais aussi dans zsh, ksh et yash. Voirhexdump <<< superuser
. Le résultat en Base64 devrait êtrec3VwZXJ1c2Vy
.)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:
Il devrait être disponible par défaut sur OS X.
la source
--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
etbase64 -D <<< string
pour coder et décoder une chaîne dans le terminal, oubase64 -in file
etbase64 -D -in file
pour coder et décoder un fichier.la source
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:
Ou installez
coreutils
via Brew (brew install coreutils
) qui fournira labase64
commande:la source
Sur macOS, j'utilise toujours:
echo -n "STRING" | base64
-n est d'éviter un nouveau caractère de ligne à la fin de la ligne.
la source
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).
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):
Exemple STDIN:
la source
Vous pouvez également le diriger vers le presse-papiers (au moins sur mac):
openssl base64 -in [filename] | pbcopy
la source
base64 < [filename] | pbcopy
Python
Python est préinstallé sur tous les macs de nos jours.
Dans Terminal Run
python
(ou ipython ).Encoder un fichier:
Décoder un fichier:
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
Omettre le
-out
/-output... filename
imprimera sur stdout.base64
Un autre utilitaire ootb présent à la fois sous OSX et Ubuntu:
la source
Où nom est le nom à afficher dans l'en-tête codé.
Exemple:
ou
la source
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 etecho -n <base64-ed data> | base64 -D
décoder a bien fonctionné.la source
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:
Alternativement, vous pouvez utiliser
printf
:la source
Il y a Perl plus MIME :: 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:
Cela sauvegarde fichier1 dans fichier1.txt et écrit la sortie codée en base 64 sur le fichier d'origine.
la source
Une version simple de NodeJS:
la source
openssl
(et maintenantbase64
), venez avec le système d'exploitation.recode devrait faire l'affaire pour vous
recode est disponible pour OS X via MacPorts .
la source
base64
commander.Si vous codez en base64 un fichier de police, procédez comme suit:
Je l'utilise sur un Mac (10.10) tout le temps.
Remarque : il n'y aura pas de sauts de ligne.
la source
Solutions multiplateformes
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.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.
la source