我有一台服务器计算图像的哈希并将图像和哈希发送到客户端。我让客户端计算它接收的图像的哈希值。这是基本设置:
SERVER
unsigned char sum[MD5_DIGEST_LENGTH];
md5sum(tdata, sum);
w = write(newsockfd,sum,MD5_DIGEST_LENGTH);
客户端
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");
输出完全相同,但如何使用if语句检查它们的相等性?如果我这样做:
if (sum == ssum)
它总是评估为假。
答案 0 :(得分:9)
使用memcmp:
memcmp()函数应比较前n个字节(每个字节) 解释为s1指向的对象的unsigned char) s2指向的对象的前n个字节。
非零返回值的符号应由符号确定 第一对字节的值之间的差异(两者都有) 解释为类型unsigned char)在对象中不同 比较。
答案 1 :(得分:5)
sum
和ssum
是数组,这意味着他们将指针指向一块内存,因此当您编写if (sum == ssum)
时,您和#39;重新比较两个指针。这就是为什么显然你的输出总是假的,因为指向不同内存块的指针可能是相同的。
因此,您需要按其元素比较两个数组。您可以使用memcmp
:
bool isEqual = (memcmp(sum, ssum, MAX_DIGEST_LENGTH) == 0);