当使用TwoFish加密时,不可避免地会在某个时刻遇到最后一个纯文本块小于128位的情况。在这种情况下如何处理填充?例如,最后一个块只有112位(14个字节)。您是否只用随机位填充字节15并使用第16个字节来判断块中包含多少填充?在这种情况下,最后一个字节可以包含00010000,以指示该块的16位是填充。
答案 0 :(得分:2)
今天有几种不同的padding mechanisms是常用的;选择哪一个主要是协议设计者选择一个并说它是该协议的标准。 (我不知道有任何令人信服的理由选择其中一个。)
我所知道的最常见的,并且允许子字节(位级)填充的工作是添加一个1
位,然后需要尽可能多的0
位来完成块。
我知道的下一个最常见的是使用零或随机数据填充并使用块中的最后一个字节来指示填充使用了多少字节。
您也可以使用字节值,但需要使用多个字节进行填充;如果需要添加一个字节,请使用0x01
填充,如果需要填充四个字节,则填充0x04 0x04 0x04 0x04
等。
一个可能引起你注意的小技巧是你几乎总是需要添加一个填充块 - 即使整个块都是填充 - 只是让你有一个可逆转换。如果在消息是块大小的倍数时忽略添加填充块,则可能会尝试将合法消息内容剥离为填充。您可以通过其他机制发信号通知缺少填充,也可以随时添加填充。 (这通常更容易。)