58

尝试在 GNU/Linux 上解码 base64 文件,我得到“base64:无效输入”。

$ base64 test.zip | base64 -d > test2.zip
base64: invalid input
$ ll test*
-rw-r--r-- 1 user grp 152 19 11:41 test.zip
-rw-r--r-- 1 user grp  57 19 11:42 test2.zip

我尝试了dos2unix命令,但没有帮助。

我的 base64 版本:

$ base64 --version
base64 (GNU coreutils) 5.97
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

Written by Simon Josefsson.
4

4 回答 4

107

该版本不会(默认情况下)解码带有分隔符的行,但编码器默认情况下会这样做。(较新的版本没有这个问题。)

一种解决方案:

base64 -w 0 foo.zip | base64 -d > foo2.zip

备用:

base64 foo.zip | base64 -di > foo2.zip

-i选项代表(来自man页面):

-i, --ignore-garbage
       When decoding, ignore non-alphabet characters.
[...]
Decoding require compliant input by default, use --ignore-garbage to
attempt to recover from non-alphabet characters (such as newlines)
于 2013-03-19T03:00:25.657 回答
6

或者更简单

base64 -di foo.zip > foo2.zip

于 2019-12-19T23:36:02.250 回答
3

如果您在 Mac 上执行此操作,您的版本base64可能没有处理忽略垃圾的灵活性。如果您 brew install coreutils,您将拥有该gbase64实用程序并按照 Joe 的描述使用它。

于 2020-06-10T23:32:17.767 回答
1

您也可以尝试使用

echo -n

抑制新行并将输入长度填充为 4 的倍数,其中包含一到三个相等的字符

=
于 2020-06-04T22:16:59.303 回答