我正在尝试从文件中读取数据并在CFB模式下使用AES加密数据而没有填充

' AES/CFB/NoPadding '。 IV为16字节长。

鉴于AES默认情况下可以使用16个字节的块,因此如果我使用的是CBC或CFB以外的任何其他模式,我会考虑使用填充方案。 CFB本质上不需要填充明文。

因此,问题在于,如果我的文件包含的数据少于16个字节,则不会加密任何内容。如果它大于16个字节,则仅前16个字节被加密。

这清楚地表明块大小正在增加,并且是否存在字节w.r.t的下溢或溢出。块大小,然后丢弃该数据/字节。

我不明白的是在使用CFB时,我不需要填充数据..对!那么,为什么AES的16字节默认块大小开始起作用并截断数据呢?

最佳答案

您未能指定要针对该模式反馈的位数,因此将获得默认的128位。听起来您需要8位,对此,您应该使用以下参数来获取getInstance():

Cipher.getInstance("AES/CFB8/NoPadding");

关于java - AES加密可在CFB模式下切断文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11028239/

10-09 05:13