不兼容的AES实施?

我已经从这个站点编译了一些AES实现代码,它应该是128位密钥加密。 我测试了一起工作正常的加密/解密程序。

但是,如果我用上面提到的代码加密任何东西,然后尝试通过linux内置的openssl工具解密它,我就是无法解密它,它甚至会记录我的错误幻数错误。 同样,如果我使用openssl加密任何东西并尝试使用代码解密将无法正常工作。 我试过用cbc ecb。

如果他们都在实施AES,它不应该以同样的方式工作吗?

它看起来像C代码使用ECB并且没有填充。 因此,尝试加密16字节的消息(一个倍数),然后加上16字节的值16(pkcs#7填充)。 或者在openssl中使用16字节的消息(倍数)和–nopad(更有可能工作)。 另外,使用aes-128-ecb或其他任何名称。

分组密码适用于文本的“块” – 在这种情况下,它长度为16个字符。 因此,如果您不想担心填充,则需要提供准确数量的块。

此外,ecb模式(依次执行每个块而无需额外处理)对于许多用途来说并不安全。 看维基百科文章(看看企鹅照片)。

[编辑:] [编辑2:]

 > echo -n "abcdabcdabcdabcd" > msg > wc msg 0 1 16 msg > openssl enc -aes-128-ecb -nopad -in msg -K 0 -S "" -iv "" [noise] > openssl enc -aes-128-ecb -nopad -in msg -K 0 -S "" -iv "" | wc 0 1 16 

自己尝试以上,看看其他代码是否解密它(编辑2明确设置密钥,并删除IV和盐 – 在这种情况下不确定后两者是什么)。

[编辑3:]

据我所知,问题与密码转换为密钥的方式有关。 除非我将一个键指定为hex( -K 0 ),否则openssl似乎正在做一些额外的事情,我无法摆脱它。 如果我这样做,其他程序不起作用(需要密码)。

对不起,我没有想法。