提问人:rocky 提问时间:11/16/2023 最后编辑:chux - Reinstate Monicarocky 更新时间:11/16/2023 访问量:40
MD5输出第一轮后不同
MD5 output different after the first round
问:
我正在测试MD5算法,代码如下:
int main(int argc, char **argv) {
char *msg;
size_t len;
int i;
uint8_t result[16];
uint8_t buf[16];
msg = "md5_5_times";
len = strlen(msg);
md5((uint8_t*)msg, len, result);
// display result
for (i = 0; i < 16; i++)
printf("%2.2x", result[i]);
puts("");
for (i = 0; i < 4; i++) {
memmove(buf, result, 16);
md5((uint8_t*)buf, 16, result);
memset(buf, 0, sizeof(buf));
for (int j = 0; j < 16; j++)
printf("%2.2x", result[j]);
puts("");
}
return 0;
}
第一轮的输出与在线 MD5 计算器的结果相同。但是,for 循环中四轮的输出是不同的。我怀疑原因是for循环中的输入数据是十六进制字符串,而第一轮中的输入数据是ASCII字符串。
如何修改代码以解决此问题?
哈希结果:
7e9dbd24e91a4575a1d176ef0d370579
...
44fd5a924a76097b23511cae0774de56
2e7e0b54e065fe5e29a77ccb415ae2ee
797f5799a539a18a8369da5fd23ea71c
答: 暂无答案
评论
memcpy
memmove
memset
len = strlen(msg); md5((uint8_t*)msg, len, result);
md5()
msg
char msg[11] = "md5_5_times"; md5((uint8_t*)msg, 11, result);
msg