尝试在OpenSSL中解密文件时出现Bad Magic Number错误

时间:2013-10-03 14:19:50

标签: openssl

我正在使用最新版本的OpenSSL for Windows,我正在尝试解密使用DES加密的消息U2FsdGVkX18ztmw81FTK/c+jAf8xtcZdIpesuV2PLDM=(密码为:pass)我正在使用以下命令< / p>

des -d -in Encrypted.txt -out normal.txt

输入密码后我得到了错误的幻数错误:传递

Encrypted.txt包含加密邮件U2FsdGVkX18ztmw81FTK/c+jAf8xtcZdIpesuV2PLDM= 和normal.txt为空

我搜索了堆栈溢出中的所有帖子,发现没有可以解决我问题的文章,请帮助解决这个问题。

2 个答案:

答案 0 :(得分:8)

des命令的输入不应该在base64中。相反,您需要首先解码base64输出,然后将其提供给OpenSSL des命令。例如,当我在Linux上运行以下命令时:

echo U2FsdGVkX18ztmw81FTK/c+jAf8xtcZdIpesuV2PLDM= | openssl enc -base64 -d | openssl des -d

我得到了正确的输出:

hello world

由于Windows不适合管道,因此您必须将输出重定向到中间文件,然后运行单独的openssl命令。

答案 1 :(得分:0)

Openssl可以使用-a-base64开关在同一步骤中对base64进行解码和解密。但是,openssl的base64处理中存在一个错误,它期望在base64编码数据的末尾有换行符。

最简单的解决方案是在解密之前先base64 --decode

例如,考虑以下base64加密输出:

# echo foo | openssl enc -aes256 -md sha512 -pass pass:pass -e -base64

U2FsdGVkX182tdJx07S5YoPzi9XhyONdR8Xbc6V1jiw=

如果使用换行符发送,则可以正常工作。但是,如果没有,它将失败。

# 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

您可以使用cat插入换行符,或者首先使用其他实用程序对base64进行解码:

# 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