【发布时间】:2015-06-13 19:28:51
【问题描述】:
我想为 MD5 算法创建块。这是我的代码:
uint8_t buffer[64];
for (int i = size + 1; i < 56; i++)
buffer[i] = 0;
但我不知道如何在最后 64 位上添加消息长度。有什么想法吗?
【问题讨论】:
我想为 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
但是你应该小心字节顺序。这将根据您机器的字节序写入length。如果您想以某种特定的字节顺序存储它,也许您可以使用按位运算符手动完成。查看更多信息 here 和 here
如果您希望length 具有固定大小,可以将其声明为uint32_t,并在memcpy 中直接使用4 作为最后一个参数。
【讨论】:
size 的价值是什么?