c-MD5-添加消息长度



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

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

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

您声明了长度为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

但是你应该小心endianness。这将根据机器的字节序写入length。如果你想把它存储在某个特定的endianness中,也许你可以使用位运算符手动完成。在这里查看更多信息,在这里查看

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

最新更新