Encryption 使用OpenSSL问题输出解密字符串

Encryption 使用OpenSSL问题输出解密字符串,encryption,openssl,aes,pyopenssl,ecb,Encryption,Openssl,Aes,Pyopenssl,Ecb,我有一个加密字符串,我需要解密它: 我所掌握的信息: 使用的加密:RFC3826(AES-128) 加密字符串:AjL4iV8YSGnNOCQYOJXIP97GjCAYp2k0QLm56XxJN0p/yu5xQh5uitX3UmfP3bzZaXDd2u6hMwp6cxO3cNL1cg== 密钥:MySecretKey 当我使用以下网站时,我可以毫无问题地解密它: () 最终结果: Base64:ZTY3OTkzMmQtMTJiMi00OGEyLThlZjctMzAxY2RiOWFiNTdi

我有一个加密字符串,我需要解密它:

我所掌握的信息:

  • 使用的加密:RFC3826(AES-128)
  • 加密字符串:AjL4iV8YSGnNOCQYOJXIP97GjCAYp2k0QLm56XxJN0p/yu5xQh5uitX3UmfP3bzZaXDd2u6hMwp6cxO3cNL1cg==
  • 密钥:MySecretKey
当我使用以下网站时,我可以毫无问题地解密它:

()

最终结果:

  • Base64:ZTY3OTkzMmQtMTJiMi00OGEyLThlZjctMzAxY2RiOWFiNTdiMjg5WUgzSVRJWFJI
  • 纯文本:e679932d-12b2-48a2-8ef7-301cdb9ab57b289YH3ITIXRH
当我尝试使用OpenSSL解密它时,我有一些特殊字符:

openssl enc-aes-128-ecb-d-a-nopad-nosalt-pass:MySecretKey-in string.txt

输出字符串: úUzÊVmwN☺+æ¨+\˨Ì┬cåÁ⌂▄B░×H·4é▀+>╦ G├[ëæ│_i(A&1·:0>▼è3oR

我做错什么了吗?

从对你所做的(有限的)描述中,可以识别出两个缺陷

首先,您使用的网站在加密数据时会应用填充。您提供的纯文本由48字节组成:

$ echo -n 'e679932d-12b2-48a2-8ef7-301cdb9ab57b289YH3ITIXRH' | wc -c
      48
这是16的倍数。但密文长度为64字节。这可以通过base64在将密文字符串送入
wc
之前对其进行解码来看出:

$ echo -n 'AjL4iV8YSGnNOCQYOJXIP97GjCAYp2k0QLm56XxJN0p/yu5xQh5uitX3UmfP3bzZaXDd2u6hMwp6cxO3cNL1cg==' | openssl base64 -A -d | wc -c
      64
即使明文长度为16字节的倍数,也会将16字节添加到密文中,这意味着会应用填充。因此,在
openssl
命令中,不应使用
-nopad
选项

其次,您的
openssl
命令将密钥作为密码短语提供,而网站不会将“secret key”输入字段解释为密码短语。除了在
openssl
命令中使用
-pass
之外,您应该使用
-K
,它将密钥作为实际的字节值序列提供

例如,以下
openssl
命令可以在网站表单中成功复制:

$ echo -n '1234567890123456' | openssl enc -aes-128-ecb -K 6162636465666768696a6b6c6d6e6f70 -nosalt -base64 -A -out string.txt
$ cat string.txt
M3q3c85LGdEj9k8iep/J145kzoc/F027JCP82BRYDhU=
用于加密和

$ cat string.txt | openssl enc -d -aes-128-ecb -K 6162636465666768696a6b6c6d6e6f70 -nosalt -base64 -A
1234567890123456
用于解密

为了在网站中获得相同的结果,在明文输入字段中使用的字符串是
1234567890123456
,在密钥输入字段中使用的字符串是
abcdefghijklmnop
。字段“AES加密输出”的内容将与
string.txt
的内容相同,这也是您需要在“要解密的文本”字段中输入的内容


(用于
echo
-n
标志和用于
openssl enc
-A
标志用于避免在末尾添加换行符)。

在Java中解密,如果有人感兴趣:

非常感谢您的回答!现在一切正常!