2016-05-27 233 views
0

我想了解更多关于AES如何通过实现在此链接上描述的算法http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf。我有两种加密和解密方式,我知道我的加密是正确的,因为在我用来测试代码的链接中提供了一些示例。但是,我不确定如何测试我的解密算法是否正常工作。 我遇到的问题是我的AES实现不适用于16B输入(它返回垃圾)。然而,它正在为25KB的输入工作。此外,它的工作原理是,它准确地加密和解密大部分文件,除了开头的字节和文件末尾的字节。不幸的是,我目前没有权限访问整个代码(如果需要,我可以记住所有代码)以便在此处发布。我希望看到有人会根据我的描述了解可能是什么问题。我不完全理解除了开始和结束字节之外,文件是如何被解密的,因为这应该是ECB模式,所以不应该把整个文件当作垃圾而不是开始和结束(因为ECB接受一块输入和输出相同大小的输出块)。AES-128加密/解密

+1

如果不是块大小的倍数,是否填充输入? – Buddy

+1

s/EBC/ECB /(电子代码簿) –

+0

@AlanStokes注明并修复。 –

回答

0

听起来好像你真的在使用CBC模式,而且iv是不一样的,可能只是为了iv而捡垃圾。请参阅CBC mode

最后的错误字节可能是一个填充问题。你如何处理要加密的输入,其长度不是块大小的倍数?

+0

虽然这是问题。我没有使用IV,也没有使用下一个明文输入XOR我的密文。我确定我正在使用ECB,因为我只是将输入复制到状态数组中,对其进行加密,将其转换为数组,然后重复该过程。没有任何链接。 –

+0

你不提填充,你如何处理?你需要做的是获得16字节,20字节和32字节的工作,这些都是简单的情况。为其他来源获取参考良好加密并进行比较,是加密还是解密正确?选择一个破碎的工作。将示例输入和输出添加到十六进制问题中。 – zaph

+0

啊,我的道歉。之所以我没有提到填充,是因为我知道知道ECB和CBC都需要填充,除非你试图实现密码窃取,但也有它自己的缺点,这是众所周知的。我在我的代码中实现了填充,并且通过将文件长度四舍五入到16的最大倍数(因为我使用的AES的输入块大小为16字节)。之后,我解密密文并只输出到原始文件的未填充长度。 –