전신 검사를 위해 게시하고 있습니다. 조금만 들리면 용서해주세요. Sha-1 해싱 알고리즘을 구현하는 데 좋은 초기 프로젝트가 있다고 생각하므로 암호화에 대해 자세히 배우려고합니다. 내가 walk-through을 찾았고 walk-through가 잘못되었거나 bitness/rotation/binary 연산에 대한 나의 이해가 잘못되었는지 알지 못하는 지점에 도달했습니다.비트 배열 및 SHA-1 용 이진수를 비트 시프트
단계 11.2 : 문서에서
위의 네 가지 기능 중 하나를 완료 한 후 함께을 담아, 각 변수는 다음 단어로 루프를 다시 시작하기 전에이 단계로 이동합니다 . 이 단계에서는 'temp'라는 새 변수를 만들고 다음과 같게 설정합니다. (A 왼쪽 회전 5) + F + E + K + ( 현재 단어).
왼쪽 회전 이외에도 우리가 수행하는 작업은 기본 추가 작업입니다. 바이너리로 추가하는 것만으로도 간단하게 이 될 수 있습니다.
이 단계의 예제로 마지막 단어 (79)의 결과를 사용합니다.
A lrot 5: 00110001000100010000101101110100 F: 10001011110000011101111100100001 A lrot 5 + F Out: 110111100110100101110101010010101
이 연산의 결과는 두 입력보다 1 비트 길다는 것에 주목하십시오. 이는 5와 6을 추가하는 것과 같으며 답변을 나타 내기 위해 새로운 자리 값이 필요합니다. 을 제대로 작동 시키려면 결국 여분의 비트를자를 필요가 있습니다. 그러나 우리는 끝날 때까지 그렇게하고 싶지 않습니다!
이것은 제대로 작동하지 않습니다. 내가 일어날 것이라고 생각하는 것입니다 :
A = 00110001000100010000101101110100
F = 10001011110000011101111100100001
A Left rotate 5 = 00100010001000010110111010000110
(A Left Rotate 5) + F = 10101101111000110100110110100111 (which is still 32 bits)
은 내가해야 할 것은 "예 krtzer, 당신이 올바른지이 문서가 잘못"또는 "귀하의 이해 비트 수, 엔디 언 및 말이에 눈의 또 다른 세트입니다/또는 비트 회전이 잘못되었습니다. 이것이 작동하는 방식입니다. "
정수 표현이 잘못되었는지 확실하지 않습니다. (사양에 U32s 사용이 나와 있지만 여분의 비트를 추적해야한다고 나와 있습니다.) 내 프로그램의 엔디안이 회전을 엉망으로 만들고 있습니다. 리틀 엔디안을 사용합니다.) 또는 다른 것이 있습니다.
어떤 경험이나 통찰력도 감사하겠습니다!