我正在使用带有 bash shell 的 CentOS 7。我认为对二进制文件进行 base64 编码就像
[rails@server lib]$ cat mybinary.file | base64 > /tmp/output.base64
但是,我注意到当我查看文件长度时,它不是四的倍数
[rails@server lib]$ ls -al /tmp/output.base64
-rw-rw-r-- 1 rails rails 92935 May 31 15:50 /tmp/output.base64
我不知道我所做的是否有效,但是当我尝试使用 JS 库解码文件时,我收到一个错误,抱怨字符串长度不是四的倍数,所以我想知道我上面所做的是否正确,或者是否有其他方法可以做到。
注意输出中的尾随换行符
base64
,它是这里的第九个字符。对于更长的输入,它将产生多于一行,因为默认情况下它每 76 个字符换行一次输出。您可以使用 禁用换行(包括最后的换行符)
base64 -w0
,或者通过管道输出tr -d '\n'
.base64
为中等长度的字符串写入多行,因此您必须从文件大小中扣除正确数量的换行符。在某些系统上,该实用程序可能会编写一个 DOS 文本文件(不是base64
来自 GNU coreutils,而是来自 BSD 系统上常见的fourmilab的实现),在这种情况下,您必须每行减去 2 个字节才能获得编码的长度细绳。回答评论中的问题:“我如何在没有任何新的留置权或其他垃圾的情况下获得原始 base64 字符串?只是 base64 字符串?”
base64
在每 76 个字符后插入换行符,因为 76 个字符是 MIME 编码文本行的最大长度(base 64 最常用于为电子邮件创建 base 64 Content-Transfer-Encoding)。如果要删除这些换行符:
使用
base64
GNU coreutils,您可以使用根据手册:
听起来你正在做的事情是正确的,但我宁愿而不是调用无用的使用,而是
cat
建议类似的东西base64 file > file.b64
。