[英]C getting equal hash values for different strings openssl
我對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程序員通常應該改進他們的代碼,直到沒有給出警告。 如果您的代碼觸發了一個您無法避免的警告,那么至少應該仔細評論原因。
你無法有意義地返回一些本地數組的地址。
你可以return strdup(hashwert);
並且具有調用函數(調用者)應該free
結果的約定。
或者您可以使用不同的API,例如將hashwert
作為函數的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.