我正在读这本书密码工程,目前的问题如下:
使用现有的加密库,解密以下密文(十六进制形式):
539b333b39706d149028cfe1d9d4a407
使用以下 256 位密钥(也是十六进制):
8000000000000000000000000000000000000000000000000000000000000001
使用 AES。
我有点困惑。我使用的是 OpenSSL,但使用参数-aes256
要求 IV,而这个问题显然没有给出。将 IV 全部输入为零会导致解密失败。尝试使用其他 AES 加密方法并没有取得多大进展。我可能有点不知所措,但只是想学习这些东西的工作原理。我是一名视频游戏程序员,所以这对我来说都是新的。任何帮助解决这个教科书问题的方法都将不胜感激!
注意:我已经进行了详尽的 Stack Overflow 和 Google 搜索,但大约一个小时后仍未取得任何进展。
答案1
由于没有操作模式已指定,并且由于密文长度等于一个 AES 密码块的大小(128 位 = 32 个十六进制数字 = 16 字节),因此您很可能需要使用原始分组密码(又名“ECB 模式”)。
事实上,你可以使用openssl 加密。您需要的选项是-aes-256-ecb
,这将选择 ECB 模式下的 AES-256 密码,以及-nopad
,这将关闭消息填充.*
当然,您还需要先将密文从十六进制转换为原始字节。(您可以使用-K
选项直接以十六进制提供密钥。)输出明文将不是是可打印的 ASCII,但将其转换回十六进制应该会显示出清晰的模式。
*) 事实上,你的明文做恰好以有效结束PKCS#7 填充,因此即使没有 ,openssl 也会很乐意解密它-nopad
。不过,我认为这只是巧合。