gpt4 book ai didi

C为不同的字符串获取相等的哈希值openssl

转载 作者:行者123 更新时间:2023-11-30 14:23:23 24 4
gpt4 key购买 nike

我对c还很陌生。我正在尝试使用 md5 比较两个文件。我编写了一个应该返回哈希值的函数。但是当比较不同文件或缓冲区的值时,它说它们具有相同的哈希值。

unsigned char* getMD5(void *buffer, size_t bsize) {
EVP_MD_CTX *mdctx;
const EVP_MD *md;
unsigned char hashwert[EVP_MAX_MD_SIZE];
int hashwert_laenge;
OpenSSL_add_all_digests();
md = EVP_get_digestbyname("MD5");
mdctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, buffer, bsize);
EVP_DigestFinal_ex(mdctx, hashwert, &hashwert_laenge);
EVP_MD_CTX_destroy(mdctx);
return hashwert;
}

//in main...
char mess[] = "abc";
cahr mess2[] = "bcd";
if(strcmp(getMD5(mess, strlen(mess)),getMD5(mess2, strlen(mess2))==0) {
printf("euqal\n");
}else {
printf("not equal \n");
}

我总是知道缓冲区是相等的,即使它们不相等。问候

最佳答案

您应该在启用所有警告和调试信息的情况下进行编译,例如在 Linux 上使用 gcc -Wall -g

它会警告您:函数返回局部变量的地址

新手和专家 C 程序员通常应该改进他们的代码,直到不再发出警告为止。如果您的代码触发了您确实无法避免的警告,您至少应该非常仔细地注释原因。

您无法有意义地返回某些本地数组的地址。

您可以返回 strdup(hashwert); 并约定调用函数(调用者)应释放结果。

或者您可以使用不同的 API,例如将 hashwert 作为函数的参数。

关于C为不同的字符串获取相等的哈希值openssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12932175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com