2013-07-08 92 views
0

我已经编译了一些来自site的AES实现代码,它应该执行128位密钥加密。我测试了可以一起工作的加密/解密程序。但是如果我用上面的代码加密任何东西,然后尝试通过linux内置的openssl工具来解密它,我就不能解密它,它甚至会记录我的不好的幻数错误。同样,如果我使用openssl加密任何内容并尝试使用代码进行解密将无法工作。我试着用cbc ecb。不兼容的AES实现?

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

+0

有太多的信息无法确定。 AES有不同的模式,例如CBC或CFB,填充(null,PKCS7等)的类型以及数据传入。密钥和初始化向量是否相同?发布相关代码并显示您如何使用OpenSSL应该有助于诊断。 – vcsjones

+1

好吧,你是对的,我会做一些编辑... – diegoaguilar

+0

到目前为止,我在这里给更多的信息:http://stackoverflow.com/questions/17517156/different-encrypted-outputs-in-aes-实现?rq = 1 – diegoaguilar

回答

1

它看起来像C代码使用ECB并且没有填充。所以试着加密一个16字节的消息(多个),接着16个字节的值16(pkcs#7填充)。或者使用16字节的消息(多个)和 - openssl中的--nopad(更可能工作)。也可以使用aes-128-ecb或其他名称。

分组密码在文本的“块”上工作 - 在这种情况下,它的长度为16个字符。所以如果你不想担心填充,你需要给出确切数量的块。

另外,ecb模式(依次执行每个块并且没有额外的处理)对于许多用途并不安全。请参阅wikipedia文章(查看企鹅照片)。

[编辑:] [编辑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:]

据我所知道的,问题是关系到方式,密码被转换为关键。 openssl似乎在做额外的事情,我无法摆脱,除非我指定一个键为十六进制(-K 0)。如果我这样做,其他程序不起作用(需要密码)。

对不起,我没有想法。

+0

对不起,如果它是愚蠢的问,我怎样才能做16个字节的消息和16个字节的值16的倍数? – diegoaguilar

+0

用'openssl aes-128-ecb -nopad -in msg -out output'尝试并得到:坏解密 139963007211200:错误:0607F08A:数字包络例程:EVP_EncryptFinal_ex:数据不是块长度的倍数:evp_enc.c:414: – diegoaguilar

+0

味精必须完全是16个字符。例如(不包括引号和不返回)“abcdabcdabcdabcd” –