web-dev-qa-db-ja.com

base64のデコード:無効な入力

GNU/Linuxでbase64ファイルをデコードしようとすると、「base64:invalid input」というメッセージが表示されます。

$ 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.
31
andyf

そのバージョンは、セパレーターを使用して(デフォルトで)行をデコードしませんが、エンコーダーはデフォルトでそれを行います。 (新しいバージョンにはこの問題はありません。)

1つの解決策:

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)
59
Joe