繁体   English   中英

使用openssl / md5的意外MD5哈希值

[英]Unexpected MD5 hash value using openssl/md5

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

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);

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

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

它应该是:

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

在你的第一个例子中它碰巧工作,因为指向数组的指针指向内存中的同一位置作为指向其第一个元素的指针(具有不同类型的depsite)。 但即使在那里,最好删除&

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM