首页
社区
课程
招聘
[旧帖] [求助]如果MD5算法中,原始信息长度为448bit,还需要填充100...么? 0.00雪花
发表于: 2009-8-7 10:53 1937

[旧帖] [求助]如果MD5算法中,原始信息长度为448bit,还需要填充100...么? 0.00雪花

2009-8-7 10:53
1937
【求助】如果MD5算法中,原始信息长度为448bit,还需要在后面填充100...000么?

Padding[64]=(0x80,0,0,0...000)

我看网上的文章说,必须填充,是否正确。谢。

原信息:12345678901234567890123456789012345678901234567890123456

Digest=29DC63DA78D43A804E8A4D4DCA707CC2?



Digest=49f193adce178490e34d1b3a4ec0064c?


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
不明白为什么要填充, MD5算法加密是不限制明文的大小的,你想下 MD5能作为文件的身份证, 可能需要填充么,个人理解,不一定正确,仅供参考。。。
2009-8-7 11:26
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
需要填充,MD5算法决定的。
原始信息长度(bit)除以512,得到的余数需要为448 bit。
所以要填充。

现在问题是如果原始信息长度余数已经为448,还要填充么?
2009-8-7 12:05
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
有没有md5算法的标准,给我看看也行啊。
2009-8-7 16:25
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
猜测下:可能是因为如果你什么都不加,算法不能保证自己的“不可逆性”。如果什么都不加,可能反推出原始数据的长度吧。
2009-8-7 16:38
0
雪    币: 119
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
要填充,如果刚好是448bit,就要再512bit的10000000……
2009-8-10 11:41
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
7
需要.
1. MD5的算法是以512Bits为一个块进行操作的, 所以输入数据必须对齐到512Bits.
2. MD5要求在原始数据结束后紧跟一个0x80做为标志, 需要占用8 Bits.
3. MD5的最后64Bits是用来存放数据长度的, 这就是448 Bits这个值的来源(512-64=448).
于是, 当最后一个块是448 Bits, 加上0x80结束符就变成了456Bits, 剩下的空间不足64Bits, 当然需要填充.
如果最后一个块是440 Bits时就不需要.
2009-8-10 22:59
0
雪    币: 72
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
能把问题在讲清楚吗,我看不懂
2009-8-11 03:04
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
9
3.1 Step 1. Append Padding Bits

   The message is "padded" (extended) so that its length (in bits) is
   congruent to 448, modulo 512. That is, the message is extended so
   that it is just 64 bits shy of being a multiple of 512 bits long.
   Padding is always performed, even if the length of the message is
   already congruent to 448, modulo 512.

   Padding is performed as follows: a single "1" bit is appended to the
   message, and then "0" bits are appended so that the length in bits of
   the padded message becomes congruent to 448, modulo 512. In all, at
   least one bit and at most 512 bits are appended.

这是RFC 1321的定义. 里面明确说明数据必须填充(扩展)直到它的长度对512取模后为448 Bits, 即使数据长度已经对齐到448Bits.
具体的操作就如维基百科里的描述一样:
//Pre-processing:
append "1" bit to message
append "0" bits until message length in bits ≡ 448 (mod 512)
append bit length of message as 64-bit little-endian integer to message

先加一个1 bit, 然后若干个 0 bits直接长度为448%512, 最后是64 bits的信息长度.
从具体实现来看, 就是先加一个0x80, 然后若干个0x00, 最后是64 bits的信息长度.
2009-8-11 22:22
0
游客
登录 | 注册 方可回帖
返回
//