【问题标题】:MD5 - add message lengthMD5 - 添加消息长度
【发布时间】:2015-06-13 19:28:51
【问题描述】:

我想为 MD5 算法创建块。这是我的代码:

uint8_t buffer[64];
for (int i = size + 1; i < 56; i++)
    buffer[i] = 0;

但我不知道如何在最后 64 位上添加消息长度。有什么想法吗?

【问题讨论】:

    标签: c byte md5


    【解决方案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。如果您想以某种特定的字节顺序存储它,也许您可​​以使用按位运算符手动完成。查看更多信息 herehere

    如果您希望length 具有固定大小,可以将其声明为uint32_t,并在memcpy 中直接使用4 作为最后一个参数。

    【讨论】:

    • @Bakus123:size 的价值是什么?
    • 大小 = 消息长度(从 1 到 10)。它是整数。
    • @Bakus123:我很抱歉现在的问题我不完全理解你想要实现的目标。 btw md5 输出长度为 16 字节;如果你能说得更清楚..
    • 我想创建 512 位块,其中第一个比特 = 消息,下一个是 0x80,直到 448 位和下一个(最后一个比特)= 消息长度为零。
    • @Bakus123:请检查我给出的字节顺序链接。大约超出范围不应该发生你的缓冲区是 64 字节,所以应该有 8 个字节的空间。也请看看memcpy是怎么用的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2016-11-14
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多