2011-01-21 5 views
2

커뮤니티에 처음 소개되었지만 프로그래밍에 익숙하지 않은 사람.SHA-1, RFC3174 및 RFC4634

나는 해시 함수 모음을 실행 중으로 만들려고 노력했지만 성공했다. 그러나 나는 이상한 결과를 발견했고 그것에 아직 손가락을 대지 못했습니다. RFC4634에는 SHA-1 및 SHA-2 패밀리에 대한 C 구현이 포함되어 있으며 해싱을 위해 전달되는 파일도 허용 할 수 있습니다. RFC3174는 C 구현을 포함하지만 파일 스트림을 처리하지 않습니다. 나는 파일을 검증하기 위해 RFC4634의 C 구현을 사용했지만 SHA-1이 제공 한 해시와 비교할 때 비슷한 결과를 반환하지는 않습니다.

이유는 무엇 일 수 있습니까?

+0

, 당신이 암호화 알고리즘의 좋은 C 구현을 찾을 수 있습니다 [Brian Gladman의 페이지] (http://gladman.plushost.co.uk/oldsite/cryptography_technology/sha/index.php). 보통보다 쉽게 ​​통합 할 수 있습니다. OpenSSL이야. – Rup

답변

2

ASCII 또는 바이너리 모드로 파일을 열 었는지 확인 했습니까? 라인 엔드 변환은 해시가 계산되기 전에 수행 될 수 있습니다.

업데이트 : 난 그냥 RFC4634 shatest를 컴파일 및 샘플 텍스트 파일에 시도

. 줄 바꿈이 없으면 모든 도구가 동의합니다. 줄 바꿈을 삽입하면 결과가 달라집니다. 텍스트 파일에서 CR 및 LF (DOS 모드)를 사용하는 경우 shatest가 다른 결과를 생성합니다. 줄 끝이 LF (UNIX) 인 경우에도 여전히 다른 도구와 일치합니다.

업데이트 2 : 기능 hashfile(...)에서 RFC4634의 shatest.c는, 바이너리 모드로 fopen를 설정 파일에서

: 여담으로

FILE *hashfp = (strcmp(hashfilename, "-") == 0) ? stdin : 
     fopen(hashfilename, "rb"); 
/*       ^HERE */ 
+0

SHA-1의 RFC3174 구현과 RFC4634의 차이점은 무엇입니까? – Nocturnal

+0

RFC 4634에 따르지 않음 : "여기 제공된 코드는 임의의 비트 길이의 입력 문자열을 지원합니다. [RFC3174]의 SHA-1 샘플 코드도 임의의 비트 길이의 입력 문자열을 처리하도록 업데이트되었습니다." –

+0

RFC3174와 함께 제공된 구현에는 파일을 해시하는 기능이 없습니다. 그래서 RFC4634에 제공된 C 구현을 사용했고 해시 출력이 주어진 해시와 일치하지 않았습니다. 이 코드는 공백을 포함하거나 포함하지 않는 해시를 지원합니다. – Nocturnal