为什么在Mac上对文件进行base64编码,结果不是正确的base64字符串?

5

我使用的是Mac OS 10.13.3操作系统。我试图对一个二进制文件进行base64编码,但遇到了一些问题。具体来说,我认为所有base64编码的文件都必须具有4的倍数长度。然而,当我对我的文件进行编码时,注意到它的长度并不是4的倍数...

localhost:lib davea$ openssl base64 -in myfile.binary -out ~/Downloads/myfile.base64
localhost:lib davea$ ls -al ~/Downloads/myfile.base64 
-rw-r--r-- 1 davea staff 93162 May 31 14:22 /Users/davea/Downloads/myfile.base64

此外,当我查看base64文件的内容时,我没有看到传统的"="或"=="结尾,这通常表示填充。

localhost:lib davea$ cat ~/Downloads/myfile.base64
...
C9vgMjoKSQYkXMLTrGKRleR558g3bY3VTqlsVvTqZXquCLp4JS4cprTG6N10H0u9
i4pwPrVmSAP2DmE1V7mGwR2e4fiYEWnZjpSbHofpzlUo34yhiQ2/5kJoQZktD7BU
uxYBAgQIECBAgBs2

我是否做错了什么,或者有另外一种方法可以对我的文件进行base64编码?


1
你的文件大小不是你期望的那样,因为你没有考虑文件中的行结尾字符。每个输入文件中的48个字符将会有64个输出字符和一个回车或换行符(取决于你使用哪个系统)。而且最后一行上也有一个行结尾字符。因此,在减去 ceiling( length_of_input_file / 48 ) 或者 ceiling( length_of_output_file / 64 ) 后,文件��小应该始终是4的倍数。 - Jason
嗨@Jason,我问这个问题的原因是因为当我尝试使用JS库(https://github.com/beatgammit/base64-js/)解码我的文件时,该库抱怨我的文件长度不是四的倍数,考虑到我列出的内容,这是有道理的。那么查看base64编码字符串的长度的正确方法是什么? - Dave
我的第一条评论中的计算不正确。应该是:在减去 ceiling( length_of_input_file / 76 )ceiling( length_of_output_file / 64 ) 后,结果必须是4的倍数。 - Jason
2个回答

6

好的。我相信我们过度思考了这个问题。以下是你需要的内容,以获得所需的行为:

openssl base64 -A -in myfile.binary -out ~/Downloads/myfile.base64

这将转换为base64格式,没有任何行结尾。选项-A就是它的关键所在。


1

我做错了什么吗?

没有。

还有其他方法可以对我的文件进行base64编码吗?

是的,您可以使用base64。它需要一个参数来指定行长度,但除此之外与您的命令类似,相当于以下命令:

base64 -b 64 -i myfile.binary -o ~/Downloads/myfile.base64

当我查看base64文件的内容时,我没有看到传统的"="或"=="结尾,这通常表示填充

Base64将3个输入字节映射到4个输出字节。您的文件大小为93162字节,可以被3整除,因此不需要填充。

希望对您有所帮助


当我运行上述命令时,出现了“base64: invalid option -- 'b'”错误。我在MacOS X和Cent OS 7上都尝试过。 - Dave
嗯,我的系统肯定出了问题。我得进一步调查一下。 - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接