MD5 - 添加消息长度
MD5 - add message length
我想为 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, and here
如果你想让length
有固定的大小,你可以声明为uint32_t
并直接在memcpy
中使用4作为最后一个参数。
我想为 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, and here
如果你想让length
有固定的大小,你可以声明为uint32_t
并直接在memcpy
中使用4作为最后一个参数。