Encryption 仅使用密钥和salt使用OpenSSL解密文本

Encryption 仅使用密钥和salt使用OpenSSL解密文本,encryption,openssl,cryptography,aes,lets-encrypt,Encryption,Openssl,Cryptography,Aes,Lets Encrypt,我想在MacOS的命令行中使用32个字符的密钥和salt对文本进行解密。我用一个程序在Windows中对它进行了加密。但是,每当我试图从命令行对其进行解密时,我都无法解密,并得到一个错误 echo -n PuYNZO+SLqFo6g97gxKr2uAPRUph/sZgaJ3T5YIBPIc= | openssl enc -d -a -aes-256-cbc -K TheTestKeyUsedIs32CharactersLong -S 53616c7455736564 -iv 0 -p hex s

我想在MacOS的命令行中使用32个字符的密钥和salt对文本进行解密。我用一个程序在Windows中对它进行了加密。但是,每当我试图从命令行对其进行解密时,我都无法解密,并得到一个错误

echo -n PuYNZO+SLqFo6g97gxKr2uAPRUph/sZgaJ3T5YIBPIc= | openssl enc -d -a -aes-256-cbc -K TheTestKeyUsedIs32CharactersLong -S 53616c7455736564 -iv 0 -p
hex string is too short, padding with zero bytes to length
hex string is too short, padding with zero bytes to length
non-hex digit
invalid hex key value
当我尝试加密时

100836

在MacOS中,它给了我完全不同的字符串

U2FsdGVkX19TYWx0VXNlZA4AWDWo5nzi8p5pYyAeUMg=

使用以下命令:

openssl enc -aes-256-cbc -a -S 53616c7455736564 -iter 5 -k TheTestKeyUsedIs32CharactersLong -in input.txt -out openssl_output.txt
从我在Windows中使用的应用程序

100836 正在转换为 PuYNZO+SLqFo6g97gxKr2uAPRUph/sZgaJ3T5YIBPIc=

  • 我的salt文本是SaltUsed
  • 我的32位字符键是测试键使用了32个字符长
  • 输入为PuYNZO+SLqFo6g97gxKr2uAPRUph/sZgaJ3T5YIBPIc=
  • 应在100836中解密
但是,结果完全出乎意料

我还尝试了一个java程序来解密它,但我得到了其他字符串,所以我想先用命令行更正它,然后跳转到代码中


我也尝试了十六进制数字的键,但仍然是响应不正确,并且不是预期的。

@Wasif和我花了一些时间在聊天中调试,最后认为这很可能是Windows上的
OpenSSL 1.1.1.d
和macOS上的
OpenSSL 1.1.1.b
之间的兼容性问题

我们进行了大量的测试和排列,使用十六进制的
(Key,IV)
元组,使用密码,加盐和不加盐,最终我们的测试归结为一个简单的检查

在Windows上使用openssl enc-a-aes-256-cbc-pass:MYPASSWORD-p-in input.txt我们得到:

salt=E70092FEBA619144 
key=29631452F8C259DFE6FD8E9372EC4B20392395F36B7A0B11769CEBEA987E90A0 
iv =93BF2E94462A43B23EF585C0F4B3F1A8 
U2FsdGVkX1/nAJL+umGRRGi3ybIPFXf7qrgov7SyXnI=
在Mac上使用
openssl aes-256-cbc-d-a-pass:MYPASSWORD-in cipherText.txt(包含'U2FsdGVkX1/nAJL+umGRRGi3ybIPFXf7qrgov7SyXnI='”

4593573484:error:06FFF064:digital envelope routines:CRYPTO_internal:bad decrypt
尽管这个简单的测试失败了,但Mac和Windows机箱在本地成功地进行了加密和解密


奇怪,但这看起来像是版本不兼容。尝试指定摘要算法:

不同版本之间的默认摘要已更改


请注意,您提供的salt为8字节十六进制编码值。我相信密钥需要十六进制编码,我也尝试过,加密文本为U2FsdGVkX19TYWx0VXNlZFhz3AhDtVqRkFhh/MKT6Pg=嘿,加密时是否使用“0”IV?是的,因为我没有定义任何索引向量。