我有一台服务器计算图像的散列并将图像和散列发送到客户端.我让客户端计算它接收的图像的哈希值.这是基本设置:
服务器
unsigned char sum[MD5_DIGEST_LENGTH];
md5sum(tdata, sum);
w = write(newsockfd,sum,MD5_DIGEST_LENGTH);
Run Code Online (Sandbox Code Playgroud)
客户
unsigned char ssum[MD5_DIGEST_LENGTH];
w = read(sockfd,ssum,MD5_DIGEST_LENGTH);
unsigned char sum[MD5_DIGEST_LENGTH];
md5sum(imgpath, sum);
int j;
for (j = 0; j < MD5_DIGEST_LENGTH; j++)
printf("%02x", ssum[j]);
printf("\n");
printf("CLIENT CHECKSUM: ", sum);
for (j = 0; j < MD5_DIGEST_LENGTH; j++)
printf("%02x", sum[j]);
printf("\n");
Run Code Online (Sandbox Code Playgroud)
输出完全相同,但如何使用if语句检查它们的相等性?如果我做:
if (sum == ssum)
Run Code Online (Sandbox Code Playgroud)
它总是评估为假.
sum并且ssum是数组,这意味着它们是指向内存块的指针,因此在编写时if (sum == ssum),您正在比较两个指针。显然,这就是为什么您的输出始终为false的原因,因为指向不同内存块的指针不能相同。
因此,您需要按其元素比较两个数组。您可以使用memcmp:
bool isEqual = (memcmp(sum, ssum, MAX_DIGEST_LENGTH) == 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12767 次 |
| 最近记录: |