gpt4 book ai didi

C sscanf MD5 到整数不起作用

转载 作者:行者123 更新时间:2023-11-30 15:54:29 25 4
gpt4 key购买 nike

我有一个将字符串转换为 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

我知道它是正确的,因为如果我将其转换为十六进制就可以了,如果我有 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

两个 printf 不应该相等吗?

我通过 sscanf 从此线程将此 MD5 转换为 int: Converting MD5 result into an integer in C

最佳答案

你的问题是字节顺序。 970722017 的十六进制是 39dc0ae1 而不是 e10adc39。不同的是4个字节的顺序。 4 字节整数可以是最低有效字节在前,也可以是其他最高有效字节在前,这取决于您运行的系统。

换句话说,与连续的字节字符串相比,4byte int 中的字节排列是向后的。

根据你在做什么,你的md5实际上是:39dc0ae1ab59ba4957e056de3e880ff2

关于C sscanf MD5 到整数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com