안녕하세요. 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;
}
이진 모드 ("rb")로 파일을 열어야 다른 줄 끝이 문제를 일으키지 않습니다. – Luke
고쳐 준다고 믿을 수 있습니까? 필자는 코드 모드에 너무 가까워서 파일 모드가 완전히 넘어갔습니다. 그것을 발견해 주셔서 감사합니다! – KC89