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) 대신
감사합니다. 나는 "test_SHA1 = test_SHA1 & 0x1ff;"시도했다. 하지만 그것은 나에게 컴파일 오류를주고있다. 당신은 pls 비트 AND를 수행하고 십진수로 변환 명령을 게시 할 수 있습니다. – Romonov
방금 그 test_SHA1 배열 (20 긴, 난 당신의 루프에서 추측하고있어) 깨달았다. char의 배열이라고 가정하면'(test_SHA1 [18] & 1) + test_SHA1 [19]'를 사용해야합니다. 또는 더 넓은 정수 타입 인 경우,'test_SHA1 [19] & 0x1ff'. 이것은 또한 이전의 결과를 설명합니다. 배열 포인터 (주소)를 부호없는 int로 캐스팅하고 주소의 하위 9 비트를 가져 왔습니다. –
내 실수. test_SHA1에 대한 선언을 추가해야합니다. 게시물을 편집하여 추가했습니다. – Romonov