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

Jak zakodować base64 przez linię poleceń?

Czy w Mac OS X jest komenda terminalowa, która zakoduje plik lub stdin base64?

Odpowiedzi (17)

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

openssl może to zrobić za Ciebie, i to wszystko jest domyślnie zainstalowane z OS X; nie ma potrzeby instalacji darwinports.

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

Bez opcji -in odczytuje z stdin

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

Openssl może być użyty bardziej zwięźle:

echo -n 'input' | openssl base64

[echo -n -\> musi być użyte, lub kodowanie zostanie wykonane z uwzględnieniem znaku nowej linii]

lub

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

Spróbuj użyć:

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

Powinien być domyślnie dostępny na OS X.

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

Polecenie base64 jest domyślnie dostępne w moim OS X 10.9.4.

Możesz użyć base64 <<< string i base64 -D <<< string do kodowania i dekodowania łańcucha w terminalu, lub base64 -in file i base64 -D -in file do kodowania i dekodowania pliku.

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

Na macOSie zawsze używam:

echo -n "STRING" | base64

-n ma na celu uniknięcie znaku nowej linii na końcu linii.

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

Ponieważ Python jest domyślnie wyposażony w OS X, możesz go używać jak poniżej:

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

Albo zainstalować coreutils poprzez Brew (brew install coreutils), który dostarczy komendę base64:

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

Jeśli chodzi o prędkość, użyłbym openssl, a następnie perl, a następnie uuencode. Jeśli chodzi o przenośność, użyłbym uuencode, a następnie Perla, a następnie openssl (jeśli zależy ci na ponownym użyciu kodu na tak wielu innych platformach UNIXowych jak to możliwe). Bądź jednak ostrożny, ponieważ nie wszystkie warianty UNIX-owe obsługują przełącznik -m (iirc AIX robi, HP/UX robi, Solaris nie).

$ 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

Użyj przełącznika -m do pliku uuencode_in. txt na base64 określony przez RFC1521 i zapisać go na filename.b64 (z nazwą pliku_when_uudecoded.txt jako domyślną nazwą pliku podczas dekodowania):

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

Przykład STDIN:

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

Można go również podłączyć bezpośrednio do schowka (przynajmniej na macu):

openssl base64 -in [filename] | pbcopy

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

Python

Python jest obecnie preinstalowany na wszystkich komputerach Mac.

In Terminal run python (lub ipython ).

Encode a file:

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

Decode a file:

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

Oczywiście obie operacje mogą być przekonwertowane na oneliner, ale dzięki temu jest bardziej czytelny.

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

Ominięcie -out/-output... filename spowoduje wydruk na standardowe wyjście.

base64

Another ootb utility present both in OSX and 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
2
2
2
2014-07-27 05:16:22 +0000

Z jakiegoś powodu, echo -n <data> | openssl base64 dodał nową linię w środku moich danych baz64. Zakładam, że było to spowodowane tym, że moje dane base64 były naprawdę długie.

Użycie echo -n <data> | base64 do kodowania i echo -n <base64-ed data> | base64 -D do dekodowania działało dobrze.

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

Where name is the name to display in the encoded header.

Przykład:

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

lub

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

Oprócz odpowiedzi Steve'a Folly'a powyżej, podczas szyfrowania w trybie stdin, aby uniknąć przekazywania dodatkowych nowych linii, naciśnij CTRL+D dwa razy, aby zakończyć wprowadzanie bez żadnych dodatkowych linii. Wyjście wyświetli się zaraz po tej samej linii.

Na przykład:

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

Alternatywnie, można użyć printf:

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

Tam jest Perl plus MIME::Base64:

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

To jest preinstalowany. Możesz określić oddzielne pliki w wierszu poleceń (lub podać dane na standardowym wejściu); każdy plik jest osobno kodowany. Możesz również zrobić:

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

To kopia zapasowa pliku1 do pliku1.txt, i zapisuje wyjście kodowane Base-64 nad plikiem oryginalnym.

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

Jeśli używasz base64 do kodowania pliku z czcionką, możesz to zrobić:

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

Używam tego na komputerze Mac (10.10) cały czas.

Uwaga : Nie będzie żadnych przerw na linię.

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

recode should do the trick for you

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

recode is available for OS X via MacPorts .

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

Cross-platform solutions

Skompilowaliśmy listę wieloplatformowych poleceń powłoki do kodowania pliku jako base64. Poniższe polecenia biorą plik wejściowy (nazwany w przykładach deploy.key) i konwertują go na base64 bez zawijania nowej linii. Wyjście base64 jest drukowane na terminalu poprzez 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

Aby przekierować wyjście do pliku, dodaj > base64-encoded.txt (używając wybranej przez siebie nazwy pliku).

Komendy te były prototypem w ramach tego żądanie pociągnięcia , gdzie chcieliśmy komendy powłoki międzyplatformowej do kodowania pliku base64 kluczem prywatnym SSH w celu usunięcia nowych linii.

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

Prosta wersja NodeJS:

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