2015-11-25 23 views
1

我使用蕁麻疹爲MD5哈希(我也試過SHA1與同樣的問題)。每當我散列任何東西時,散列總是相同的,即使對於截然不同的長度和數據。爲什麼我的MD5哈希靜態整個過程?

if (rs.response->body != NULL && rs.response->body->len > 0) { // body is a unsigned char*, len is a size_t, I have verified both here with a printf. 
     struct md5_ctx md5ctx; 
     md5_init(&md5ctx); 
     md5_update(&md5ctx, rs.response->body->len, rs.response->body->data); 
     unsigned char md5raw[16]; 
     md5_digest(&md5ctx, 16, md5raw); 
     char md5[33]; 
     md5[32] = 0; 
     for (int i = 0; i < 4; i++) { 
      snprintf(md5 + (i * 8), 9, "%08X", md5raw + (i * 4)); 
     } 
     printf("%s\n", md5); 
    } 

我已經驗證,他們是不同的值,Valgrind的報告沒有無效讀/寫等哈希值發生變化,當我重新啓動過程,但絕不是在過程中的不同。

回答

0

snprintf取值參數。你給它一個指針,它打印指針。嘗試

 snprintf(md5 + (i * 8), 9, "%08X", *(int *) (md5raw + (i * 4)));