linux 解码基数64:无效输入

daupos2t  于 2023-03-07  发布在  Linux
关注(0)|答案(5)|浏览(407)

尝试在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.
lb3vh1jj

lb3vh1jj1#

该版本不会解码(默认)带有分隔符的行,但编码器默认会这样做(较新版本没有这个问题)。
一个解决方案:
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)
ia2d9nvy

ia2d9nvy2#

或者更简单地说
base64 -di foo.zip > foo2.zip

xj3cbfub

xj3cbfub3#

如果你在mac上安装base64,你的base64版本可能没有处理忽略垃圾的灵活性,如果你安装了coreutils,你将拥有gbase64实用程序,并像Joe描述的那样使用它。

vmpqdwk3

vmpqdwk34#

您也可以尝试使用

echo -n

取消新行并使用一到三个相等的字符将输入长度填充为4的倍数

=
nvbavucw

nvbavucw5#

对于我来说,我将Windows上的base64输出从Linux控制台复制到一个文件中,然后将其粘贴到Windows中的一个文件中(崇高的文本),并保存它。base64 -d抱怨它与base64: invalid input。在调查输入文件后,我发现文件有Windows行尾,CRLF,而原始的base64数据是在Linux中构建的,带有Unix行尾。所以我重新打开source-base64-文件,将行尾更改为Unix,并保存文件,解码成功,没有任何问题。

相关问题