我正在使用最新版本的OpenSSL for Windows,我正在尝试解密使用DES加密的消息U2FsdGVkX18ztmw81FTK/c+jAf8xtcZdIpesuV2PLDM=
(密码为:pass
)我正在使用以下命令< / p>
des -d -in Encrypted.txt -out normal.txt
输入密码后我得到了错误的幻数错误:传递
Encrypted.txt包含加密邮件U2FsdGVkX18ztmw81FTK/c+jAf8xtcZdIpesuV2PLDM=
和normal.txt为空
我搜索了堆栈溢出中的所有帖子,发现没有可以解决我问题的文章,请帮助解决这个问题。
答案 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