我从这个站点编译了一些AES实现代码,应该是128位密钥加密。我测试了加密/解密程序,这些程序可以一起工作。
但是,如果我用上面提到的代码加密任何东西,然后尝试通过openssl工具在linux中对其进行解密,我就是无法解密它,它甚至会记录下错误的魔术号错误。同样,如果我用openssl加密任何东西,并尝试用代码解密将无法工作。我和两家cbc欧洲央行都试过。
如果他们都在实现AES,难道不应该用同样的方式吗?
发布于 2013-07-08 00:48:10
看起来C代码使用的是欧洲央行,没有填充。因此,尝试加密16字节的消息(多个),然后加密值16的16字节(pkcs#7填充)。或者在openssl中使用16字节的消息(多个)和--nopad (更有可能工作)。此外,使用aes-128-ecb或任何它被称为.
一个分组密码工作在“块”的文本-在本例中,它有16个字符长。所以,如果你不想担心填充物,你需要给出确切的块数。
此外,欧洲央行模式(在没有额外处理的情况下依次执行每个块)对于许多用途来说并不安全。请看维基百科的文章(看企鹅照片)。
编辑:
> 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和salt -在本例中不确定后两者的用途)。
编辑3:
据我所知,这个问题与密码转换为密钥的方式有关。openssl似乎在做一些我无法摆脱的额外事情,除非我将密钥指定为十六进制(-K 0)。如果我这样做,另一个程序就不能工作(需要密码)。
抱歉,我没什么主意了。
https://stackoverflow.com/questions/17517696
复制相似问题