Відповіді:
openssl
може це зробити для вас, і все це встановлено з OS X за замовчуванням; не потрібно встановлювати darwinports.
$ openssl base64 -in <infile> -out <outfile>
Без -in
варіанту читає з stdin
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
або cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
пропустіть запис у файл і просто скопіюйте вихідний код, кодований base64, у буфер обміну без розривів рядків.
-d
прапор для декодування.
openssl base64 -e <<< ram
а для декодування:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
це робить. + @kenny при декодуванні, якщо вхід не має нового рядка кожні 76 символів, включаючи випадок, який я не вказав у новому рядку, який я нещодавно заявив, вам потрібні -d -A
або ви отримаєте відсутні або пошкоджені дані без повідомлення про помилку (хоча є звіт про помилку в очікуванні, який може призвести до виправлення цього).
openssl base64 -e <<< ram
насправді кодує 4 байти, включаючи подачу рядкової лінії; див hexdump <<< ram
.
Openssl можна використовувати більш лаконічно:
echo -n 'input' | openssl base64
[echo -n -> необхідно використовувати, або кодування буде виконано, включаючи новий символ рядка]
або
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
без openssl
. У будь-якому випадку мені потрібно двічі натиснути Ctrl + D. І будьте обережні, @Garret: у Bash, з або без openssl
, openssl base64 <<< superuser
і openssl base64 <<< "superuser"
помилково виходять c3VwZXJ1c2VyCg==
, оскільки "тут рядок" все ще включає стрічку каналу! ( Мабуть, не тільки в Баші, але і в зш, кш і яш. Дивіться hexdump <<< superuser
. Результат Base64 повинен бути c3VwZXJ1c2Vy
.)
echo -n
є кращим, якщо вам не потрібен новий рядок. Це, безумовно, щось слід пам’ятати.
printf
замістьecho -n
Спробуйте скористатися:
base64 -i <in-file> -o <outfile>
Він повинен бути доступний за замовчуванням в ОС X.
--decode
щоб змінити процес від base64 до звичайного.
openssl base64
. Дякую!
base64
команда доступна за замовчуванням на моїй ОС X 10.9.4.
Ви можете використовувати base64 <<< string
і base64 -D <<< string
для кодування і декодування рядки в терміналі, чи base64 -in file
і base64 -D -in file
для кодування і декодування файлів.
Invalid characer in input stream
при використанні <<<
... Я пробував "
, '
і нічого навколо струни.
Оскільки Python за замовчуванням надається OS X, ви можете використовувати його як нижче:
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
Або встановити coreutils
через Brew ( brew install coreutils
), який надасть base64
команду:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
З точки зору швидкості, я б використовував openssl, а потім perl, а потім uuencode. З точки зору портативності, я б використав uuencode, а потім Perl, а потім openssl (Якщо ви хочете скористатися кодом на багатьох інших UNIX, таких як фондові платформи). Але будьте обережні, оскільки не всі варіанти UNIX підтримують перемикач -m (iirc AIX робить, HP / UX робить, 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
Використовуйте перемикач -m, щоб uuencode file_in.txt на base64, як визначено RFC1521, і запишіть його у filename.b64 (з ім'ям файлу_when_uudecoded.txt як ім'я файлу за замовчуванням при декодуванні):
uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
Приклад STDIN:
cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
Сьогодні Python встановлений на всіх комп’ютерах.
У Terminal run python
(або ipython ).
Кодування файлу:
base64data = open('myfile.jpg','rb').read().encode('base64')
open('myfile.txt','w').write(base64data)
Розшифруйте файл:
data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)
Звичайно, обидві операції можна перетворити на одиничний ліній, але таким чином він легше читається.
## 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
Пропустивши -out
/ -output... filename
буде надруковано для stdout.
Ще одна утиліта ootb, присутні як в OSX, так і в 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
Де назва - це ім'я, яке відображатиметься в кодованому заголовку.
Приклад:
cat docbook-xsl.css | uuencode -m docbook-xsl.css
або
uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
uuencode
це не кодування якbase64
Чомусь echo -n <data> | openssl base64
в середині моїх даних base64 додали новий рядок. Я припускаю, що це було тому, що мої бази даних64 були дуже довгими.
Використання echo -n <data> | base64
для кодування та echo -n <base64-ed data> | base64 -D
декодування добре працювало.
Крім відповіді Стіва Фоллі вище, під час шифрування в режимі stdin, щоб уникнути переходу зайвих нових рядків, натисніть CTRL + D двічі, щоб закінчити введення даних без додаткових нових рядків. Результат відображатиметься відразу після того ж рядка.
Наприклад:
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
Крім того, ви можете використовувати printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
Є Perl плюс MIME :: Base64:
perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'
Це попередньо встановлено. Ви можете вказати окремі файли в командному рядку (або надати дані на стандартному вході); кожен файл окремо закодований. Ви також можете зробити:
perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1
Це створює резервну копію file1 до file1.txt і записує кодований вихід Base-64 над вихідним файлом.
Проста версія NodeJS:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(і зараз base64
) йде з ОС.
recode повинен зробити трюк для вас
recode ../b64 < file.txt > file.b64
Рекод доступний для OS X через MacPorts .
base64
команда.
Ми склали список команд оболонки між платформами, щоб кодувати файл як base64. Наступні команди беруть вхідний файл (названий deploy.key
у прикладах) і перетворюють його в base64 без будь-якого обгортання нового рядка. Вихід base64 друкується на термінал через 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
Щоб перенаправити вихідний файл до файлу, додайте > base64-encoded.txt
(використовуючи вибране ім'я файлу).
Ці команди були прототиповані як частина цього запиту на витяг, де ми хотіли, щоб команди команд оболонки міжплатформних платформ base64 кодували приватний ключ SSH для видалення нових рядків.
base64 -d
абоbase64 -D
залежить від вашої операційної системи. OSX використовує-D
.