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

Hoe codeer je base64 via de opdrachtregel?

Is er een terminalopdracht in Mac OS X die een bestand of stdin zal coderen op basis64?

Antwoorden (17)

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

openssl kan dit voor u doen, en het is allemaal standaard geïnstalleerd met OS X; het is niet nodig om darwinports te installeren.

$ openssl base64 -in <infile> -out <outfile>

Zonder de -in optie leest u van stdin

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

Openssl kan beknopter worden gebruikt:

echo -n 'input' | openssl base64

[echo -n -> moet worden gebruikt, of er wordt gecodeerd met een nieuw regelkarakter]

of

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

Probeer het met:

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

Het zou standaard beschikbaar moeten zijn op OS X.

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

base64 commando is standaard beschikbaar op mijn OS X 10.9.4.

U kunt base64 <<< string en base64 -D <<< string gebruiken om een string in de terminal te coderen en te decoderen, of base64 -in file en base64 -D -in file om een bestand te coderen en te decoderen.

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

Op macOS gebruik ik altijd:

echo -n "STRING" | base64 -n is het vermijden van een nieuw regelkarakter op het einde van de regel.

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

Aangezien Python standaard is voorzien van OS X, kunt u het als volgt gebruiken:

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

of installeer coreutils via Brew (brew install coreutils) die de opdracht base64 geeft:

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

In termen van snelheid zou ik openssl gebruiken, gevolgd door perl, gevolgd door uuencode. In termen van overdraagbaarheid zou ik uuencode gebruiken, gevolgd door Perl, gevolgd door openssl (als je er belang aan hecht om de code te hergebruiken op zoveel mogelijk andere UNIX-achtige voorraadplatforms). Wees echter voorzichtig want niet alle UNIX varianten ondersteunen de -m switch (iirc AIX wel, HP/UX wel, Solaris niet).

$ 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

Gebruik de -m switch naar uuencode bestand_in. txt per base64 zoals gespecificeerd door RFC1521 en schrijf het naar filenaam.b64 (met filenaam_uudecoded.txt als standaard filenaam wanneer gedecodeerd):

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

STDIN voorbeeld:

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

U kunt het ook direct op het klembord plaatsen (in ieder geval op de mac):

openssl base64 -in [filename] | pbcopy

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

Python

Python komt tegenwoordig op alle macs voorgeïnstalleerd.

In Terminal run python (of ipython ).

Codeer een bestand:

base64data = open('myfile.jpg','rb').read().encode('base64')
 open('myfile.txt','w').write(base64data)

Decodeer een bestand:

data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)

Natuurlijk kunnen beide bewerkingen worden geconverteerd naar een oneliner maar op deze manier is het beter leesbaar.

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

Het weglaten van de -out/-output... filename zal een stdout afdrukken.

base64

Een andere ootb utility die zowel in OSX als in Ubuntu aanwezig is:

## 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

Om een of andere reden heeft echo -n <data> | openssl base64 een nieuwe lijn toegevoegd in het midden van mijn basis64 gegevens. Ik neem aan dat het was omdat mijn base64 data erg lang was.

Het gebruik van echo -n <data> | base64 om te coderen en echo -n <base64-ed data> | base64 -D om te decoderen werkte prima.

2
2
2
2013-04-04 20:12:06 +0000
uuencode -m [-o output_file] [file] name

waarbij naam de naam is die in de gecodeerde koptekst moet worden weergegeven.

Voorbeeld:

cat docbook-xsl.css | uuencode -m docbook-xsl.css

of

uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
2
2
2
2016-07-27 18:14:32 +0000

In aanvulling op Steve Folly’s antwoord hierboven, drukt u bij het coderen in stdin-modus, om te voorkomen dat er extra nieuwe regels worden doorgegeven, twee keer op CTRL+D om de invoer te beëindigen zonder extra nieuwe regels. De uitvoer wordt direct na dezelfde regel weergegeven.

Bijvoorbeeld:

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

Als alternatief kunt u printf gebruiken:

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

Er is Perl plus MIME::Base64:

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

Dit wordt voorgeïnstalleerd. U kunt afzonderlijke bestanden op de commandoregel opgeven (of de gegevens op de standaardinvoer aanleveren); elk bestand wordt afzonderlijk gecodeerd. Je kunt ook doen:

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

Dit maakt een back-up van bestand1 naar bestand1.txt, en schrijft de Base-64 gecodeerde uitvoer over het originele bestand.

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

Als je base64 een lettertypebestand codeert, kan je dit doen:

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

Ik gebruik dit de hele tijd op een Mac (10.10).

Aanwijzing : Er zullen geen linebreaks zijn.

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

hercodering moet de truc voor u doen

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

hercodering is beschikbaar voor OS X via MacPorts .

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

Cross-platform oplossingen

We hebben een lijst samengesteld van cross-platform shell commando’s om een bestand te coderen als basis64. De volgende commando’s nemen een invoerbestand (met de naam deploy.key in voorbeelden) en converteren het naar base64 zonder newline wrapping. De uitvoer van base64 wordt naar de terminal geprint 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

Om de uitvoer om te leiden naar een bestand, voeg > base64-encoded.txt toe (met een bestandsnaam naar keuze).

Deze commando’s werden als onderdeel van deze pull request waarbij we cross-platform shell commando’s wilden laten coderen naar base64 en een SSH private key om nieuwe lijnen te verwijderen.

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

Een eenvoudige NodeJS versie:

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