我有一个将字符串转换为 MD5 的函数:
if(snprintf(target, 7, "123456") == -1){
errx(1, "snprintf");
}
uint a[4];
char w[64] = {0};
strncpy(w, target, 56);
md5_prep(w);
md5_cpu((uint*)&w[0], &a[0], &a[1], &a[2], &a[3]);
printf("%llu %llu %llu %llu\n", a[0], a[1], a[2], a[3]);
这个 printf 给了我:
970722017 2874784329 1474320062 1049104370
我知道这是正确的,因为如果我将其转换为 HEX 就可以了,如果密码我有 MD5 哈希并尝试这样做:
if(snprintf(g, 33, "e10adc3949ba59abbe56e057f20f883e") == -1){
errx(1, "snprintf");
}
uint a[4];
sscanf(&g[0], "%x", &a0]);
sscanf(&g[8], "%x", &a[1]);
sscanf(&g[16], "%x", &a[2]);
sscanf(&g[24], "%x", &a[3]);
printf("%llu %llu %llu %llu\n", a[0], a[1], a[2], a[3]);
结果是:
4294967295 4294967295 4061104190 4061104190
两个 printfs 不应该相等吗?
我通过这个线程的 sscanf 工具这个 MD5 到 int 转换: Converting MD5 result into an integer in C