C++ 使用openssl/MD5的意外MD5哈希值

C++ 使用openssl/MD5的意外MD5哈希值,c++,c,md5,C++,C,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(&mdStrin

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

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);
unsigned char digest[MD5_digest_LENGTH];
字符字符串[]=“fNameName”;
MD5((无符号字符*)&字符串,strlen(字符串),(无符号字符*)&摘要;
char-mdString[33];
对于(int i=0;i<16;i++)
sprintf(&mdString[i*2],“%02x”,(unsigned int)摘要[i]);
printf(“全名:%s\n”,字符串);
printf(“md5摘要:%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);
char*fname=“fname”;
char*lname=“lname”;
char*fullname=新字符[strlen(fname)+strlen(lname)+1];
strcpy(全名,fname);
strcat(全名、lname);
MD5((未签名字符*)&全名,strlen(全名),(未签名字符*)&摘要;
char mdString1[33];
对于(int i=0;i<16;i++)
sprintf(&mdString1[i*2],“%02x”,(无符号整数)摘要[i]);
printf(“全名:%s\n”,全名);
printf(“md5摘要:%s\n”,mdString1);

此处使用的是指向指针的指针,而不是指向数据的指针:

MD5((unsigned char*) &fullname, strlen(fullname), (unsigned char*) &digest);
应该是:

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

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

谢谢,问题已经解决了。但我不明白为什么?因为你在散列指针值,而不是它指向的数据。好家伙,谢谢。