在使用TwoFish加密时,不可避免地会遇到最后一个纯文本块小于128位的情况。在这种情况下如何处理填充?例如,假设最后一个块只有112比特(14字节)。您是否只需要用随机位填充字节15,并使用第16个字节来告诉块中包含了多少填充?在这种情况下,作为最后一个字节可以包含00010000,以指示块的16位是填充的。
发布于 2011-11-13 08:33:06
目前有几种不同的padding mechanisms;选择哪一种主要取决于协议设计者选择哪一种,并说它是该协议的标准。(我不知道有什么令人信服的理由让我选择其中一个。)
据我所知,最常见的一种方法是添加一个1位,然后添加完成该块所需的任意多个0位,这种方法支持子字节(位级)填充。
我所知道的下一个最常见的方法是用零或随机数据填充,并使用块中的最后一个字节来表示有多少字节用于填充。
您还可以使用填充所需的字节数作为字节值;如果需要添加一个字节,则使用0x01填充;如果需要填充四个字节,则使用0x04 0x04 0x04 0x04填充,依此类推。
一个小技巧可能会让您明白,您几乎总是需要添加一个填充块--即使整个块都是填充的--这样您就有了一个可逆的转换。如果在消息是块大小的倍数时忽略添加填充块,则可以尝试将合法的消息内容作为填充进行剥离。您可以通过其他机制发出缺少填充的信号,也可以随时添加填充。(这通常更容易。)
https://stackoverflow.com/questions/8108517
复制相似问题