我已经编译了一些来自site的AES实现代码,它应该执行128位密钥加密。我测试了可以一起工作的加密/解密程序。但是如果我用上面的代码加密任何东西,然后尝试通过linux内置的openssl工具来解密它,我就不能解密它,它甚至会记录我的不好的幻数错误。同样,如果我使用openssl加密任何内容并尝试使用代码进行解密将无法工作。我试着用cbc ecb。不兼容的AES实现?
如果他们都在实施AES,不应该以相同的方式工作吗?
我已经编译了一些来自site的AES实现代码,它应该执行128位密钥加密。我测试了可以一起工作的加密/解密程序。但是如果我用上面的代码加密任何东西,然后尝试通过linux内置的openssl工具来解密它,我就不能解密它,它甚至会记录我的不好的幻数错误。同样,如果我使用openssl加密任何内容并尝试使用代码进行解密将无法工作。我试着用cbc ecb。不兼容的AES实现?
如果他们都在实施AES,不应该以相同的方式工作吗?
它看起来像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
)。如果我这样做,其他程序不起作用(需要密码)。
对不起,我没有想法。
对不起,如果它是愚蠢的问,我怎样才能做16个字节的消息和16个字节的值16的倍数? – diegoaguilar
用'openssl aes-128-ecb -nopad -in msg -out output'尝试并得到:坏解密 139963007211200:错误:0607F08A:数字包络例程:EVP_EncryptFinal_ex:数据不是块长度的倍数:evp_enc.c:414: – diegoaguilar
味精必须完全是16个字符。例如(不包括引号和不返回)“abcdabcdabcdabcd” –
有太多的信息无法确定。 AES有不同的模式,例如CBC或CFB,填充(null,PKCS7等)的类型以及数据传入。密钥和初始化向量是否相同?发布相关代码并显示您如何使用OpenSSL应该有助于诊断。 – vcsjones
好吧,你是对的,我会做一些编辑... – diegoaguilar
到目前为止,我在这里给更多的信息:http://stackoverflow.com/questions/17517156/different-encrypted-outputs-in-aes-实现?rq = 1 – diegoaguilar