13

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

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

输入密码后我收到错误的幻数错误:通过

Encrypted.txt 包含加密的消息U2FsdGVkX18ztmw81FTK/c+jAf8xtcZdIpesuV2PLDM= ,而 normal.txt 为空

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

4

2 回答 2

9

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

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

我得到正确的输出:

hello world

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

于 2013-10-03T14:33:06.627 回答
2

-aOpenssl 可以使用or-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
于 2018-06-29T16:48:58.053 回答