【发布时间】:2013-07-08 00:22:59
【问题描述】:
我从site 编译了一些 AES 实现代码,它应该执行 128 位密钥加密。我测试了可以协同工作的加密/解密程序。
但是,如果我使用上述代码加密任何内容,然后尝试使用 linux 内置的 openssl 工具对其进行解密,我就是无法解密它,它甚至会记录我 错误的幻数 错误。同样,如果我使用 openssl 加密任何内容并尝试使用代码解密将不起作用。我尝试了两个 cbc ecb。
如果他们都在实现 AES,它不应该以同样的方式工作吗?
【问题讨论】:
-
信息太少,无法确定。 AES 有不同的模式,例如 CBC 或 CFB,什么样的填充(null、PKCS7 等)以及进入的数据。密钥和初始化向量是否相同?发布相关代码并展示您如何使用 OpenSSL,应该有助于诊断。
-
好吧,你说得对,我要进行一些编辑...
-
到目前为止,我在这里提供更多信息:stackoverflow.com/questions/17517156/…
-
AES 只是低级算法。还有密钥编码、填充、块链接模式等的选择。如果这些选择不同,那么实现将不会直接兼容。
-
看起来 C 代码正在使用 ECB 并且没有填充。所以尝试加密一条 16 字节的消息(倍数),后跟 16 字节的值 16(pkcs#7 填充)。或在 openssl 中使用 16 个字节的消息(倍数)和
--nopad(更有可能工作)。另外,使用 -ecb-128 或其他任何名称。
标签: c algorithm encryption aes