首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不兼容的AES实现?

不兼容的AES实现?
EN

Stack Overflow用户
提问于 2013-07-08 00:22:59
回答 1查看 1.1K关注 0票数 0

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

但是,如果我用上面提到的代码加密任何东西,然后尝试通过openssl工具在linux中对其进行解密,我就是无法解密它,它甚至会记录下错误的魔术号错误。同样,如果我用openssl加密任何东西,并尝试用代码解密将无法工作。我和两家cbc欧洲央行都试过。

如果他们都在实现AES,难道不应该用同样的方式吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-08 00:48:10

看起来C代码使用的是欧洲央行,没有填充。因此,尝试加密16字节的消息(多个),然后加密值16的16字节(pkcs#7填充)。或者在openssl中使用16字节的消息(多个)和--nopad (更有可能工作)。此外,使用aes-128-ecb或任何它被称为.

一个分组密码工作在“块”的文本-在本例中,它有16个字符长。所以,如果你不想担心填充物,你需要给出确切的块数。

此外,欧洲央行模式(在没有额外处理的情况下依次执行每个块)对于许多用途来说并不安全。请看维基百科的文章(看企鹅照片)。

编辑:

代码语言:javascript
复制
> 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)。如果我这样做,另一个程序就不能工作(需要密码)。

抱歉,我没什么主意了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17517696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档