MD5 - 添加消息长度
Posted
技术标签:
【中文标题】MD5 - 添加消息长度【英文标题】:MD5 - add message length 【发布时间】:2015-06-13 19:28:51 【问题描述】:我想为 MD5 算法创建块。这是我的代码:
uint8_t buffer[64];
for (int i = size + 1; i < 56; i++)
buffer[i] = 0;
但我不知道如何在最后 64 位上添加消息长度。有什么想法吗?
【问题讨论】:
【参考方案1】:你声明了长度为 8 的 buffer
,你怎么会期望它起作用:
for (int i = size + 1; i < 56; i++)
buffer[i] = 0;
越界访问?
好的,您从第 56 个元素开始说要存储长度。为什么不 做这样的事情:
memcpy(&buffer[56], &length, sizeof(int)); // you may want to check sizeof(int) on your machine to know how many bytes were written
但是你应该小心字节顺序。这将根据您机器的字节序写入length
。如果您想以某种特定的字节顺序存储它,也许您可以使用按位运算符手动完成。查看更多信息 here 和 here
如果您希望length
具有固定大小,可以将其声明为uint32_t
,并在memcpy
中直接使用4 作为最后一个参数。
【讨论】:
@Bakus123:size
的价值是什么?
大小 = 消息长度(从 1 到 10)。它是整数。
@Bakus123:我很抱歉现在的问题我不完全理解你想要实现的目标。 btw md5 输出长度为 16 字节;如果你能说得更清楚..
我想创建 512 位块,其中第一个比特 = 消息,下一个是 0x80,直到 448 位和下一个(最后一个比特)= 消息长度为零。
@Bakus123:请检查我给出的字节顺序链接。大约超出范围不应该发生你的缓冲区是 64 字节,所以应该有 8 个字节的空间。也请看看memcpy是怎么用的以上是关于MD5 - 添加消息长度的主要内容,如果未能解决你的问题,请参考以下文章