解密使用较低 OpenSSL 版本加密的令牌

解密使用较低 OpenSSL 版本加密的令牌

我们目前使用 OpenSSL 1.0.1 来加密令牌,如下所示:

加密:

回显 $TOKEN | openssl enc -aes-256-cbc -e -kfile<kfile 路径>-md sha256 | base64 -w 0

解密:

回显 $TOKEN | base64 -w 0 -d | openssl enc -aes-256-cbc -d -kfile<kfile 路径>-md sha256

上述命令在 OpenSSL 版本为 1.0.1 的主机上运行良好。但我们有一个要求,即需要在 1.0.1 中加密令牌,并在 1.1.1 中解密。

我尝试了相同的解密命令(如上所示),但出现了严重的解密错误:

]▒ad decrypt
140437674784640:error:06065064:digital envelope
routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:643:

答案1

鉴于 OpenSSL 1.0.1 自 2017 年 1 月 1 日起不再受支持,并且确实有与之相关的重大安全警告,我只能确认,一旦使用错误得到修复,代码就可以与当前的 3.0.11(带有安全补丁的 Debian 稳定版)一起使用

加密

token='hello, world'
kfile='kfile'
echo 'Secret surprise' >"$kfile"

encoded=$(
    printf '%s' "$token" |
    openssl enc -aes-256-cbc -e -k "$kfile" -md sha256 |
    base64 -w0
)
echo "$encoded"

输出

*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.

U2FsdGVkX1+OA++hZRtIx8hSXmw19lUpHJbH4/jbNIo=

解密

output=$(
    printf '%s' "$encoded" |
    base64 -d |
    openssl enc -aes-256-cbc -d -k "$kfile" -md sha256
)
echo "$output"

输出

*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.

hello, world

參閱OpenSSL 1.1.1b 警告:解密使用 OpenSSL 1.1.0g 加密的文件时最好使用 -iter 或 -pbkdf2以获得解决警告消息的提示。(例如,-pbkdf2在加密和解密调用中添加标志。)

答案2

抱歉造成混淆,我在解密时使用了错误的 kfile,因此出现错误。我添加了正确的 kfile,它可以正常工作,但唯一的问题是它会生成如下所示的警告消息

*** 警告:已使用弃用的密钥派生。使用 -iter 或 -pbkdf2 会更好。

相关内容