簡體   English   中英

C為不同的字符串openssl獲取相等的哈希值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM