文字列を 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