2010-06-20 122 views
0

嘿,那裏。我在創建sha256散列時遇到了一個非常奇怪的問題。我做了一個簡單的C控制檯程序,它將文件路徑作爲參數,並使用可以找到的獨立sha256代碼here。我在Windows 7 x64上使用MinGW 5.1.6編譯了該程序。Windows C SHA256無效生成問題

在文件上測試程序時,結果散列錯誤。我通過在文件上使用md5deep來確保這一點,然後在Linux下使用sha256sum。 我也驗證了它不是通過在我的Linux機器上用相同的文件編譯和運行相同的代碼的代碼;它產生的散列與由md5deep和sha256sum產生的散列相同。

我還將Aaron Gifford的sha256實現改編爲我簡單程序的另一個版本,並在Windows和Linux上再次執行測試,並以相同的結果結束。

問題可能是由編譯器標誌尚未被開啓導致的?

我的C語言知識並不令人驚奇,而且我對編譯器選項的瞭解甚至更糟,所以任何幫助都會非常感激。

很簡單的程序代碼如下:

#include <stdio.h> 
#include "sha256.h" 

#define BUFLEN 16384 

int main(int argc, char *argv[]) { 
    sha256_context ctx256; 
    sha256_starts(&ctx256); 
    int kl, l, fd; 
    unsigned char buf[BUFLEN]; 
    FILE *file = (FILE*) 0; 
    char *filepath; 

    fd = fileno(stdin); 

    filepath = argv[1]; 
    file = fopen(filepath, "r"); 

    fd = fileno(file); 
    while ((l = read(fd, buf, BUFLEN)) > 0) { 
     kl += l; 
     sha256_update(&ctx256, buf, l); 
    } 
    fclose(file); 
    uint8 sha256sum[32]; 
    sha256_finish(&ctx256, sha256sum); 
    int i; 
    for (i = 0; i < 32; i++) { 
     printf("%02x", sha256sum[i]); 
    } 
    printf("\n"); 

    return 0; 
} 
+2

您應該真正以二進制模式(「rb」)打開文件,以便不同的行尾不會導致您的問題。 – Luke 2010-06-20 16:16:55

+0

你能相信解決嗎?我一直非常接近代碼,文件模式完全覆蓋了我的腦海。感謝您的發現! – KC89 2010-06-20 18:17:23

回答