#1 楼
openssl
可以为您完成此操作,并且默认情况下,它们都已随OS X一起安装;无需安装darwinports。$ openssl base64 -in <infile> -out <outfile>
而无需从qdin中读取
-in
选项评论
使用openssl base64
–马蒂亚斯·拜恩斯(Mathias Bynens)
2011-4-12 13:07
并使用-d标志进行解码。
–肯尼
2013年12月11日在22:26
在mac中,要对base64编码一个字符串:openssl base64 -e <<< ram并进行解码:openssl base64 -d <<< cmFtCg ==
–Ram Patra
2014年11月13日10:52
@mathias,如果您不希望换行,则openssl base64 [-e] -A这样做。 + @kenny进行解码,如果输入最多每76个字符没有换行符,包括我刚刚说过的无换行符情况,则需要-d -A,否则将丢失或损坏数据而没有错误消息(尽管有一个待处理的错误报告,可能会对此进行修复)。
–dave_thompson_085
2015年5月27日14:54
@Ram,openssl base64 -e <<< ram实际上编码4个字节,包括尾随的换行符;参见hexdump <<< ram。
– Arjan
15年6月3日在20:39
#2 楼
可以更简洁地使用Openssl:echo -n 'input' | openssl base64
[echo -n->必须使用,否则将进行编码,包括换行符]
或
openssl base64 <ENTER> [type input] <CTRL+D>
评论
不过,“ echo”解决方案将LF(换行符)字符添加到输入字符串的末尾。更好地使用:echo -n'input'
– SuperTempel
2012年7月17日15:17
甚至更简洁的openssl base64 <<<输入
–加里特·佛格利(Garrett Fogerlie)
2013年6月6日在16:57
或者只使用没有openssl的base64。无论哪种方式,我都需要按两次Ctrl + D。提防@Garret:在Bash中,无论是否带有openssl,openssl base64 <<<超级用户,openssl base64 <<<“超级用户”都会错误地产生c3VwZXJ1c2VyCg ==,因为“此处的字符串”仍然包含换行符! (显然,不仅在Bash中,而且在zsh,ksh和yash中也是如此。请参见hexdump <<<超级用户。Base64结果应为c3VwZXJ1c2Vy。)
– Arjan
15年6月3日在20:37
@Arjan我会毫不犹豫地使用“错误地”一词-如您所指出的,这里的字符串包含换行符,但是出于充分的理由-unix.stackexchange.com/questions/20157/…。如果不需要换行,则首选echo -n。这肯定是要注意的。
–史蒂夫·弗利(Steve Folly)
2015年6月5日7:33
您可以使用printf代替echo -n
–Jason S
16-09-5在6:08
#3 楼
尝试使用:base64 -i <in-file> -o <outfile>
默认情况下应在OS X上可用。
评论
添加--decode将过程从base64还原为正常。
–luckydonald
18年2月2日在14:05
这对于SVG编码比较好,因为它会创建一行。这比openssl base64的输出干净。谢谢!
–假名
19年4月18日在1:35
#4 楼
在我的OS X 10.9.4上,默认情况下可以使用base64
命令。可以在终端中使用
base64 <<< string
和base64 -D <<< string
编码和解码字符串,或者使用base64 -in file
和base64 -D -in file
编码和解码文件。 br />评论
你有例子吗?使用<<< ...时,输入流中出现无效字符。
–乔纳斯(Jonas)
16-09-20在11:46
@Jonas你在什么壳里?您可以在bash和zsh中使用它。
– WKPlus
16-09-21在12:42
啊,没关系,它有效!
–乔纳斯(Jonas)
16-09-22在8:46
请注意,base64 <<< cat等同于echo cat | base64,而不是echo -n cat | base64。基本上,自动换行将被添加到base64编码的字符串中,而这可能不是您想要的。
– Bill
20-4-12的3:29
#5 楼
在macOS上,我始终使用:echo -n "STRING" | base64
-n是为了避免在行尾出现换行符。
评论
如果您正在运行Cmder,这在Windows上也适用。
–craftworkgames
20 May 27'2:03
#6 楼
由于默认情况下OS X提供了Python,因此您可以按以下方式使用它:$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
,或者通过Brew(
coreutils
)安装brew install coreutils
,它将提供base64
命令:$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
#7 楼
在速度方面,我将使用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开关,以RFC1521指定的base64为单位uuencode file_in.txt并将其写入filename.b64(当filename_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
#8 楼
您还可以将其直接传送到剪贴板(至少在Mac上为):openssl base64 -in [filename] | pbcopy
评论
打高尔夫球:base64 <[文件名] | pbcopy
–电话
16年8月11日在19:57
#9 楼
Python如今,Python已预装在所有macs上。
在Terminal运行
python
(或ipython)。编码文件:
base64data = open('myfile.jpg','rb').read().encode('base64')
open('myfile.txt','w').write(base64data)
对文件进行解码:更具可读性。
OpenSSL
data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)
省略
-out
/ -output... filename
将打印到标准输出。base64
OSX和Ubuntu中都存在另一个ootb实用程序:
## 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
#10 楼
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
–ccpizza
16年11月17日在7:27
#11 楼
由于某种原因,echo -n <data> | openssl base64
在我的base64数据中间添加了换行符。我以为是因为我的base64数据真的很长。使用
echo -n <data> | base64
进行编码和echo -n <base64-ed data> | base64 -D
进行解码可以正常工作。评论
nb:在我的nix上,我必须使用-d echo -n c29tZXVzZXI6c29tZXBhc3N3b3Jk | base64 -d someuser:somepassword
–mlo55
16-4-14的0:07
#12 楼
除上述Steve Folly的答案外,在以stdin模式加密时,为避免传递额外的换行符,请按CTRL + D两次以结束输入而没有任何其他换行符。输出将在同一行之后立即显示。例如: />
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
#13 楼
有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编码的输出写到原始文件上。
#14 楼
一个简单的NodeJS版本:node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
评论
我认为这不是一个更好的答案,因为操作系统附带了openssl(现在是base64)。
–乔什
15年3月27日在15:01
冒着分裂头发的危险-而且,我知道这种批评也适用于其他几个答案-这个问题问如何编码文件或stdin。如果我没记错的话,您的答案只会显示如何编码字符串。
– G-Man说“恢复莫妮卡”
2015年3月27日19:00
#15 楼
重新编码应该为您解决问题recode ../b64 < file.txt > file.b64
可通过MacPorts在OS X上使用重新编码。
评论
没有内置的东西吗?
–乔什
10 Mar 17 '10 at 0:24
@Josh-有-openssl
–史蒂夫·弗利(Steve Folly)
10 Mar 17 '10 at 0:25
MacPorts不附带任何OS X发行版。还有很多其他选择。例如只是base64命令。
–Jason S
2016年9月5日下午6:05
#16 楼
如果您使用base64编码字体文件,则可以执行以下操作:base64 my-webfont.ttf > my-webfont.b64.ttf.txt
我一直在Mac(10.10)上使用它。
注意:没有换行符。
#17 楼
跨平台解决方案我们编译了一系列跨平台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-encoding语法是一致的,但根据您的操作系统,base64-decoding语法是base64 -d或base64 -D。 OSX使用-D。@ChrisJohnson如果与openssl配合使用,则在OS X(10.10 Yosemite)上,解码标志为-d。