无法使用 OpenSSL 解密 AES

rob*_*ert 3 encryption openssl aes

我正在开发一个 ctf 游戏:

在 ECB 模式下使用 AES 加密。所有值 base64 编码

ciphertext = 8LBUVZfDfI6wnggG1uUYuQsRoGd08pGwHCN++R5rabMW9PJmWHWcSrjy5Tfffj6L
key = 3q1FxGhuZ5fQYbjzDxgQ35==
Run Code Online (Sandbox Code Playgroud)

我试图在我的终端中解密它,将密文保留在 base64 中并使用该-base64标志,但没有走运。然后我去了http://extranet.cryptomathic.com/aescalc,在将值转换为十六进制后,我能够解密:

key: DEAD45C4686E6797D061B8F30F1810DF 
text: F0B0545597C37C8EB09E0806D6E518B90B11A06774F291B01C237EF91E6B69B316F4F26658759C4AB8F2E537DF7E3E8B
out: 7B796F755F73686F756C645F6E6F745F706F73745F7468655F61637475616C5F6374665F76616C75657D5F5F5F5F5F5F
Run Code Online (Sandbox Code Playgroud)

然后我回到我的终端尝试:

echo -n F0B0545597C37C8EB09E0806D6E518B90B11A06774F291B01C237EF91E6B69B316F4F26658759C4AB8F2E537DF7E3E8B | openssl enc -d -K DEAD45C4686E6797D061B8F30F1810DF -aes-128-ecb -nosalt
Run Code Online (Sandbox Code Playgroud)

但我遇到了同样的错误:

bad decrypt
140735124906848:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:531:
Run Code Online (Sandbox Code Playgroud)

我已经在 Ubuntu 17.04 上尝试过这个,现在在我的 MacOSX 上使用 OpenSSL 1.0.2l。为什么我不能在自己的终端中解密?

Maa*_*wes 5

因为openssl默认情况下使用 PKCS#7 填充,而您的纯文本不包含 PKCS#7 填充。如果您的纯文本已被填充,则它已被填充字节值5F。改用该选项-nopad,用值5F填充不是我知道的任何填充方案;如果需要删除它,您需要自己删除它。

您当前以十六进制显示输入。十六进制是字节的表示,而不是字节值本身。您需要使用<为您的文件直接输入来自文件的源材料 或通过十六进制解码输入。

输出也将是二进制的;它不会代表任何可读的明文。因此,在将输出与问题中的值进行比较之前,您可能需要将输出转换为十六进制。

  • 谷歌搜索并得到了我自己的答案之一:) (2认同)
  • 5F 出现在解密的消息中。 (2认同)
  • 好的我现在明白了。使用“-nopad”不再有错误消息,但输出是错误的,有些垃圾。 (2认同)