Відповіді:
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.