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 - 添加消息长度的主要内容,如果未能解决你的问题,请参考以下文章

Java计算md5时字段格式有影响吗?

MD5

加密算法笔记

java中的MD5工具类

MD5算法

MD5算法