填充删除AES / CBC位级填充Java问题与hex文件格式

时间:2013-11-17 23:54:07

标签: java encryption aes padding

我一直在研究一些使用Java中的AES / CBC加密和解密的代码。我必须在AES / CBC模式下实现我自己的位级填充,这很简单,通过在文件中使用0x80标记。所有人都在游泳,直到不愉快的第11个小时发现输出文件必须以十六进制编码。

例如,在此实现之前的示例输出文件主要是

中的垃圾
'áÐ=.n^76s_‰ló¿àQÚ

更改后,输出文件更符合

41CC29F730895F9292FBEEB3ADA 

现在的主要问题是解密例程找不到0x80标记并知道删除填充的位置。除此之外,加密和解密仍然可以完美地工作。在使用十六进制格式之前,下面的if子句总是找到填充字节。

我检查填充标记的代码是

if (decryptedPadded[i] == (byte) 0x80)
...lop off the padding from byte[i] to the end

由于文件是十六进制格式,现在不再有效了,因为0x80是十六进制,这实在令我感到困惑。解密现在将填充保留在文件的末尾,因为上面的if子句永远不会成立。

任何人都可以了解正在发生的事情,或者当文件采用这种格式时如何检查填充标记?

0 个答案:

没有答案