Bad Magic Number error when trying to Decrypt file in OpenSSL
The input to the des
command shouldn't be in base64. Instead, you need to first decode the base64 output and then provide it to the OpenSSL des
command. For instance, when I run the following on Linux:
echo U2FsdGVkX18ztmw81FTK/c+jAf8xtcZdIpesuV2PLDM= | openssl enc -base64 -d | openssl des -d
I get the correct output:
hello world
Since Windows is not great with pipes, you have to redirect the output to intermediate files and then run individual openssl
commands.
Openssl can base64 decode and decrypt in the same step with the -a
or -base64
switch. But there is a bug in openssl's base64 processing, it expects a newline at the end of the base64 encoded data.
The easiest solution is to base64 --decode
before decrypting.
For example, consider this base64 encrypted output:
# echo foo | openssl enc -aes256 -md sha512 -pass pass:pass -e -base64
U2FsdGVkX182tdJx07S5YoPzi9XhyONdR8Xbc6V1jiw=
If this is sent with a newline, it works fine. But if not, it fails.
# echo 'U2FsdGVkX182tdJx07S5YoPzi9XhyONdR8Xbc6V1jiw=' | openssl enc -aes256 -md sha512 -pass pass:pass -d -base64
foo
# echo -n 'U2FsdGVkX182tdJx07S5YoPzi9XhyONdR8Xbc6V1jiw=' | openssl enc -aes256 -md sha512 -pass pass:pass -d -base64
error reading input file
You can insert the newline with cat, or decode the base64 with another utility first:
# echo -n 'U2FsdGVkX182tdJx07S5YoPzi9XhyONdR8Xbc6V1jiw=' | cat - <(echo "") | openssl enc -aes256 -md sha512 -pass pass:pass -d -base64
foo
# echo -n 'U2FsdGVkX182tdJx07S5YoPzi9XhyONdR8Xbc6V1jiw=' | base64 --decode | openssl enc -aes256 -md sha512 -pass pass:pass -d
foo