[openssl enc]的前向兼容性问题

使用openssl enc命令进行解密时,如同时满足以下两个条件,会导致解密失败或得到内容与原内容不一致:

  1. 加密和解密时使用的OpenSSL版本不同,且一个是1.0.2及以下版本,另一个是1.1.0及以上版本
  2. 加密时使用密码生成密钥,而不是指定HEX格式的密钥(及IV*1)

检索OpenSSL的更新日志可知,从1.0.2h更新至1.1.0(系列)时,openssl dgstopenssl enc命令的默认摘要算法由MD5改为SHA256:

Changes between 1.0.2h and 1.1.0 [25 Aug 2016]

...
*) Changed default digest for the dgst and enc commands from MD5 to
sha256[Rich Salz]
...

-md可指定摘要算法。由此一来便可以解决问题:

  • 由OpenSSL 1.0.2加密的文件,用openssl enc -{cipher} -d -md md5 -k {password}解密
  • 由OpenSSL 1.1.0加密的文件,用openssl enc -{cipher} -d -md sha256 -k {password}解密

*1.视所使用的加密算法而定,大多数算法需要IV/Nonce;少数不需要,如AES-ECB。