2011-04-07 2 views
0

해시 함수의 반환 값인 20 바이트의 부호없는 char test_SHA1 [20]이 있습니다. 다음 코드, I는보안 해시 함수에서 서명되지 않은 char의 mod

unsigned char test_SHA1[20]; 
char hex_output[41]; 
for(int di = 0; di < 20; di++) 
{ 
    sprintf(hex_output + di*2, "%02x", test_SHA1[di]); 
} 

printf("SHA1 = %s\n", hex_output); 

50b9e78177f37e3c747f67abcc8af36a44f218f5

숫자의 마지막 9 비트 I가 test_SHA1의 개조 (512)를 취함으로써 얻는 것 (십진수 = 245) 0x0f5 인이 출력을 얻는다. test_SHA1의 모드 512을 위해, 나는

int x = (unsigned int)test_SHA1 % 512; 
printf("x = %d\n", x); 

을하지만 X 나 비트 단위와와 0x1ff을하는 대신 % 연산자를 사용하는 것이 좋습니다 (158) 대신

답변

1

(245)의 것으로 밝혀졌습니다.

+0

감사합니다. 나는 "test_SHA1 = test_SHA1 & 0x1ff;"시도했다. 하지만 그것은 나에게 컴파일 오류를주고있다. 당신은 pls 비트 AND를 수행하고 십진수로 변환 명령을 게시 할 수 있습니다. – Romonov

+0

방금 ​​그 test_SHA1 배열 (20 긴, 난 당신의 루프에서 추측하고있어) 깨달았다. char의 배열이라고 가정하면'(test_SHA1 [18] & 1) + test_SHA1 [19]'를 사용해야합니다. 또는 더 넓은 정수 타입 인 경우,'test_SHA1 [19] & 0x1ff'. 이것은 또한 이전의 결과를 설명합니다. 배열 포인터 (주소)를 부호없는 int로 캐스팅하고 주소의 하위 9 비트를 가져 왔습니다. –

+0

내 실수. test_SHA1에 대한 선언을 추가해야합니다. 게시물을 편집하여 추가했습니다. – Romonov

관련 문제