因此,例如,我有一个二进制值正好是512 - 64位长的字符串,因此不必填充字符串的二进制转换。这意味着我有56个字符。
56的二进制等价物是00111000,它比64位少64 -8.剩余的部分是如何填充的?它们也有垫子吗?
当填充字符串时会发生这样的情况:
消息是“填充”(扩展),因此它的长度(以位为单位)与448模512一致。也就是说,对消息进行扩展,使其距离512位长的倍数仅差64位。填充总是被执行,即使消息的长度已经一致到448,模512。填充按如下方式执行:将单个"1“位附加到消息,然后附加"0”位,使填充消息的比特长度与448模512一致。总之,至少一个比特和最多512位被附加。
来自这里。
然而,在同一份文件中,未对剩余的“空”位(512 - 56 *8-8)作任何澄清:
将b的64位表示形式(添加填充位之前的消息长度)附加到上一步的结果中。如果b大于2^ 64,则只使用b的低阶64位。(这些位被附加为两个32位的单词,并按照以前的约定先追加低阶单词。)在这一点上,结果消息(在填充比特和使用b之后)的长度是512位的确切倍数。等效地,此消息的长度为16 (32位)字的确切倍数.让M0 ..。恩-1表示结果消息的单词,其中N是16的倍数。
我希望我的问题能被理解?
我猜64位(00111000) 0's是在64位长度的表示法前面填充的。
发布于 2016-03-10 02:09:14
在十进制中,1234,01234,0000000001234等都代表相同的数字。这个数字的唯一十位数表示是0000001234.
同样,56 (十进制)的唯一64位基-2表示形式是0000000000000000000000000000000000000000000000000000000000111000.。所以你的猜测是正确的。
但你犯了另外两个错误。首先,至少要添加一点填充。您的消息有448位长,因此必须添加512位填充,使其长度与448一致(mod 512)。其次,64位长度是以位为单位的长度,而不是字节.总之,您的448位消息后面是10000.0000111000000,总长度为1024位。
https://security.stackexchange.com/questions/101753
复制相似问题