Answers:
openssl
可以为您完成此操作,并且默认情况下,它们都已随OS X一起安装;无需安装darwinports。
$ openssl base64 -in <infile> -out <outfile>
如果没有-in
选项,则从标准输入中读取
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
echo -n
如果不需要换行,则首选。这肯定是要注意的。
printf
代替echo -n
尝试使用:
base64 -i <in-file> -o <outfile>
默认情况下,它应该在OS X上可用。
--decode
以将过程从base64还原为正常。
openssl base64
。谢谢!
base64
默认情况下,该命令在我的OS X 10.9.4上可用。
您可以使用base64 <<< string
和base64 -D <<< string
编码,并在终端进行解码的字符串,或base64 -in file
与base64 -D -in file
编码和解码的文件。
Invalid characer in input stream
在使用<<<
... 时遇到了问题"
,'
但在字符串中没有任何尝试。
在速度方面,我将先使用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的base64 file_in.txt由指定的RFC1521和(解码时filename_when_uudecoded.txt作为默认的文件名)写它filename.b64:
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已预装在所有Mac上。
在终端运行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
将打印到标准输出。
OSX和Ubuntu中都存在另一个ootb实用程序:
## 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
如果您使用base64编码字体文件,则可以执行以下操作:
base64 my-webfont.ttf > my-webfont.b64.ttf.txt
我一直在Mac(10.10)上使用它。
注意:不会有换行符。
我们编译了一系列跨平台的shell命令,以将文件编码为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
(使用您选择的文件名)。
这些命令的原型是此请求的一部分,在此我们希望跨平台的shell命令以base64编码SSH私钥以删除换行符。
base64 -d
还是base64 -D
取决于您的操作系统。OSX使用-D
。