Trying to decode base64 file on GNU/Linux, I get \"base64: invalid input\".
$ base64 test.zip | base64 -d > test2.zip
base64: invalid input
$ ll test*
-rw-r--
You can also try using
echo -n
to suppress new lines and padding the input length to a multiple of 4 with one to three equal characters
=
That version will not decode (by default) lines with separators, yet the encoder does that by default. (Newer versions don't have this problem.)
One solution:
base64 -w 0 foo.zip | base64 -d > foo2.zip
Alternate:
base64 foo.zip | base64 -di > foo2.zip
The -i
option stands for (from the man
page):
-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)
If you're doing this on a mac, your version of base64
might not have the flexibility to handle ignoring garbage. If you brew install coreutils
, you'll have the gbase64
utility and use it as Joe has described.
Or even more simply
base64 -di foo.zip > foo2.zip