2
C++에서 SHA-1 구현을 작성하려고합니다. 웬일인지 내가 예상하고있는 결과와 다른 결과를 얻고있다.SHA-1의 C++ 구현에서 잘못된 해시가 발생했습니다.
입력 test
은 a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
이됩니다.
대신 출력이 e58f4aa9a69bb1cc73084c1c87e991d3d3bb2f98
입니다.
나는 다음과 같은 기능을 가지고
난 당신이에서 here을 볼 수 I이 올바른지 압축 기능의 끝이 다섯 개 가지 변수를 (이// msg = original input
// org_len = original length of input
// output = uint8_t output[20];
sha1((uint8_t *)msg.c_str(), org_len, output);
처럼 전화
void sha1(const uint8_t *org_msg, size_t org_len, uint8_t *digest)
페이지 하단)
h0 = 10101001010010101000111111100101
h1 = 11001100101100011001101110100110
h2 = 00011100010011000000100001110011
h3 = 11010011100100011110100110000111
h4 = 10011000001011111011101111010011
변수의 형식은 모두입니다.. 지금은 내가 위해 다음과 같은 기능을 가지고 uint8_t
로 변환 할 :
void to_bytes(uint32_t val, uint8_t *bytes) {
bytes[0] = (uint8_t)val;
bytes[1] = (uint8_t)(val >> 8);
bytes[2] = (uint8_t)(val >> 16);
bytes[3] = (uint8_t)(val >> 24);
}
그리고 나는 마침내 출력과 같이 다음
to_bytes(h0, digest);
to_bytes(h1, digest + 4);
to_bytes(h2, digest + 8);
to_bytes(h3, digest + 12);
to_bytes(h4, digest + 16);
과 같이 호출 :
for (size_t i = 0; i < 20; i++) {
printf("%2.2x", output[i]);
}
결과는 e58f4aa9a69bb1cc73084c1c87e991d3d3bb2f98
입니다.
'to_bytes'는 역순으로 출력됩니다. 'bytes [0]'는 처음 8 비트를 원할 때 입력의 마지막 8 비트를 가져옵니다. –
감사합니다. 그것을 보지 못한 나를위한 어리 석음. 당신은 그것을 대답하고 그것을 똑딱 거릴 것입니다. – Cartman123
도와 드리겠습니다 :) –