【问题标题】:Unexpected MD5 hash value using openssl/md5使用 openssl/md5 的意外 MD5 哈希值
【发布时间】:2013-08-25 13:41:50
【问题描述】:

在计算硬编码字符串的哈希值时,我得到了一个正确的值。

unsigned char digest[MD5_DIGEST_LENGTH];
char string[] = "fnamelname";
MD5((unsigned char*)&string, strlen(string), (unsigned char*)&digest);
char mdString[33];

for(int i = 0; i < 16; i++)
   sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);

printf("fullName: %s\n", string);
printf("md5 digest: %s\n", mdString);

在计算准备好的字符串的哈希值时,我得到了一个不正确/更改的哈希值。

char* fname = "fname";
char* lname = "lname";
char* fullname = new char[strlen(fname) + strlen(lname) + 1];
strcpy(fullname, fname);
strcat(fullname, lname);

MD5((unsigned char*) &fullname, strlen(fullname), (unsigned char*) &digest);

char mdString1[33];

for (int i = 0; i < 16; i++)
sprintf(&mdString1[i * 2], "%02x", (unsigned int) digest[i]);

printf("fullname: %s\n", fullname);
printf("md5 digest: %s\n", mdString1);

【问题讨论】:

    标签: c++ c md5


    【解决方案1】:

    您在这里使用的是指向指针的指针,而不是指向数据的指针:

    MD5((unsigned char*) &fullname, strlen(fullname), (unsigned char*) &digest);
    

    应该是:

    MD5((unsigned char*) fullname, strlen(fullname), (unsigned char*) &digest);
    

    在您的第一个示例中,它恰好起作用,因为指向数组的指针与指向其第一个元素的指针指向内存中的相同位置(尽管具有不同的类型)。但即使在那里,最好删除&amp;

    【讨论】:

    • 非常感谢,问题已经解决。但我不知道为什么?
    • 因为你在哈希指针值而不是它指向的数据。
    • 伟人,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2012-08-17
    • 2013-03-05
    • 2011-05-17
    • 2011-01-13
    相关资源
    最近更新 更多