我们目前使用 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 会更好。