2010-06-20 3 views
0

안녕하세요. sha256 해시를 만드는 데 매우 이상한 문제가 있습니다. 나는 인자로 파일 경로를 취하고 here 찾을 수있는 독립 실행 형 sha256 코드를 사용하는 간단한 C 콘솔 프로그램을 만들었습니다. Windows 7 x64에서 MinGW 5.1.6을 사용하여 프로그램을 컴파일했습니다.Windows C SHA256 잘못된 생성 문제

파일에서 프로그램을 테스트 할 때 결과 해시가 잘못되었습니다. 파일에서 md5deep을 사용한 다음 Linux에서 파일에 sha256sum을 사용하여이 사실을 확인했습니다. 동일한 파일을 가지고있는 리눅스 박스에서 같은 코드를 컴파일하고 실행함으로써 코드가 아닌지 확인했습니다. 생성 된 해시는 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

+0

고쳐 준다고 믿을 수 있습니까? 필자는 코드 모드에 너무 가까워서 파일 모드가 완전히 넘어갔습니다. 그것을 발견해 주셔서 감사합니다! – KC89

답변