encryption/解密在两个不同的openssl版本之间不能正常工作

我已经下载并编译了openssl-1.1.0

我可以使用相同的openssl EXEencryption和解密(就像这里 )

 me@ubuntu:~/openssl-1.1.0$ LD_LIBRARY_PATH=. ./apps/openssl aes-256-cbc -a -salt -in file.txt -out file.txt.enc enter aes-256-cbc encryption password: 123 Verifying - enter aes-256-cbc encryption password: me@ubuntu:~/openssl-1.1.0$ LD_LIBRARY_PATH=. apps/openssl aes-256-cbc -a -d -in file.txt.enc -out file.txt.dec enter aes-256-cbc decryption password: 123 

这个openssl使用: libcrypto.so.1.1, libssl.so.1.1

当我尝试使用安装在我的ubuntu上的openssl进行解密时,它使用: /lib/x86_64-linux-gnu/libssl.so.1.0.0, /lib/x86_64-linux-gnu/libcrypto.so.1.0.0

我得到一个错误:

 me@ubuntu:~/openssl-1.1.0$ openssl aes-256-cbc -a -d -in file.txt.enc -out file.txt.dec2 enter aes-256-cbc decryption password: 123 bad decrypt 140456117421728:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539: 

什么可能导致这个? 谢谢

Openssl 1.1中的默认摘要已经从MD5更改为SHA256

尝试使用-md md5

 cgs@ubuntu:~$ echo "it-works!" > file.txt cgs@ubuntu:~$ LD_LIBRARY_PATH=~/openssl-1.1.0/ openssl-1.1.0/apps/openssl aes-256-cbc -a -salt -in ~/file.txt -out ~/file.txt.enc -md md5 enter aes-256-cbc encryption password: Verifying - enter aes-256-cbc encryption password: cgs@ubuntu:~$ LD_LIBRARY_PATH=~/openssl-1.0.1f/ openssl-1.0.1f/apps/openssl aes-256-cbc -a -in ~/file.txt.enc -d enter aes-256-cbc decryption password: it-works! 

丑陋的细节:

input的密码不像aes(或其他encryption)那样被使用,但是该命令隐式地从其派生密钥。 密钥派生使用在openssl中更改的消息摘要1.1 使用SHA256而不是MD5作为默认摘要。

如果你想保持简单的密码,而不是开始搞密钥门户(-K,-iv)只是强制与-md相同的摘要

我用1.1.0a(从openssl.org下载)和版本1.0.2g-fips(从我的Ubuntu 16.04)testing了AESencryption和解密,

当对两个不同版本的openssl使用-p选项时,IV和密钥是不同的:

 $ LD_LIBRARY_PATH=~/openssl-1.1.0a/ ~/openssl-1.1.0a/apps/openssl aes-256-cbc -a -p -salt -in file -out file.enc enter aes-256-cbc encryption password: Verifying - enter aes-256-cbc encryption password: salt=6A80B2A3B4CFE048 key=637E17094DF7892A7AFC14957EAA13991DFFD3273A2459EDA613F3AD8A406C38 iv =6AC7CE5C9AADC6C46C633BF5124DAFBF $ openssl aes-256-cbc -a -d -p -in file.enc -out file.dec enter aes-256-cbc decryption password: salt=6A80B2A3B4CFE048 key=6220AF2E25CB0B5D9994A0A1B05503D82AC5B0B4C9015E241CACBF8BF62DAC77 iv =2DC04EF29AA57478EBE606DF87277EA6 bad decrypt 140557073118872:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:592: 

我猜想根据与2个版本的盐的不同衍生关键和IV。

如果你想摆脱这个解密错误,你可以删除-salt选项,并在你的openssl命令中使用选项-K作为键和-iv