我试图将使用Chilkat的专有解密库转换为Apache的公共密码。我有2个示例加密输入我正在使用。第一个是16个字节,第二个是96个字节。第一个很好用,但在第二个上,CryptoCipher似乎没有消耗最后16个字节。
这里是设置和解密以及输出的一些示例代码:
--16
encln 16
consume 0
finish 13
这为2个输入产生了这2个输出:
短输入:
--96
encln 96
consume 80
finish 3
长输入:
<div class="panel-group" id="accordion">
<div class="panel panel-default">
<div class="panel-heading" data-toggle="collapse" data-parent="#accordion">
<h2 class="panel-title">
<h4>this is a title</h4>
</h2>
</div>
<div class="panel-collapse collapse" data-toggle="collapse">
<table>
<tbody>
//There's a bunch of stuff in this table
</tbody>
</table>
</div>
</div>
</div>
正如你所看到的那样,它只消耗80个字节的输入...由于较短的输入产生了正确的输出,与Chilkat产生的相比,我不知道在哪里接近这个让它与更长的输入一起工作。
答案 0 :(得分:4)
crypt.update()
和crypt.doFinal(..)
返回的数字是解密的字节数,而不是操作消耗的字节数。当您的数据被填充(或者至少将其指定为 PKCS5Padded )时,您的加密数据将始终比解密版本大一些。使用 PSCS5 和 AES ,填充将添加1到16个字节的填充到最接近的16个字节的多个字节,即 AES 的块大小。
在第一个示例中,13个字节的清除数据具有3个字节的填充,提供16个字节的加密数据(或一个完整的AES块)。在第二个示例中,您有83个字节的清除数据和13个字节的填充(提供6个16字节的AES块)。