使用OpenSSL AES-256-CBC无法解密2022年初加密的机密内容,求解决方案
使用OpenSSL AES-256-CBC无法解密2022年初加密的机密内容,求解决方案
别慌,这个问题我碰到过好多次,核心原因其实是OpenSSL版本更新后,默认的密钥派生哈希算法变了。2022年你加密时用的OpenSSL(大概率是1.1.1系列版本)默认用MD5作为密钥派生的哈希函数,但现在的OpenSSL 3.x版本默认换成了SHA-256,这就导致你用当前默认参数解密旧加密内容时,生成的密钥和当年完全不一致,自然会报bad decrypt错误。
给你几个具体的解决步骤:
1. 修正解密命令,指定旧版哈希算法
直接在解密命令里加上-md md5参数,强制使用当年的密钥派生逻辑,命令改成这样:
echo "$myencryptedsecret" | openssl enc -aes-256-cbc -a -A -d -k "$mypassword" -md md5
注意:一定要给变量
$myencryptedsecret和$mypassword加上双引号,避免shell把特殊字符截断或解析出错。
2. 如果MD5不行,尝试其他旧版默认哈希
极少数情况下,有些环境的OpenSSL 1.1.1可能被配置成默认用SHA1,你可以试试替换成-md sha1:
echo "$myencryptedsecret" | openssl enc -aes-256-cbc -a -A -d -k "$mypassword" -md sha1
3. 额外排查点
- 确认你保存的加密字符串没有被意外修改(比如多了空格、换行,或者字符编码问题)
- 当年加密时用的
echo默认会在输入末尾加换行符,解密后可能会包含这个换行,如果不需要可以用echo -n mysecret重新测试加密解密验证逻辑
按照上面的方法,应该就能顺利解密你2年前的机密内容了。
备注:内容来源于stack exchange,提问作者Chris F Carroll
相关产品推荐
相关产品推荐

