2014-12-01 9 views
0

전신 검사를 위해 게시하고 있습니다. 조금만 들리면 용서해주세요. 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 사용이 나와 있지만 여분의 비트를 추적해야한다고 나와 있습니다.) 내 프로그램의 엔디안이 회전을 엉망으로 만들고 있습니다. 리틀 엔디안을 사용합니다.) 또는 다른 것이 있습니다.

어떤 경험이나 통찰력도 감사하겠습니다!

답변

0

모든 것이 어떻게 작동하는지 이해했으면 정확합니다. 문제는 내가 쓴 기사와 관련이있다. 여분의 자리가 항상은 필요의 여부, 그리고 그것을 필요는 없습니다의 경우는 1

로 설정해야하는지 여부를 단계 11.2의 시작 부분에 추가해야합니다 기사는 지금 읽

이 작업의 결과는 두 개의 입력보다 1 비트 길다는 점에 유의하십시오. 각 반복 후에 새로운 단어는 마지막 단어보다 1 비트 길어 야합니다. 때로는 이것이 필요한 이동 통신사 비트 (기본 자리에 두 자리 숫자 5와 6을 추가 한 결과를 나타내는 데 필요한 추가 위치 값과 같음)가 필요하지 않을 때 간단히 1을 앞에 추가해야합니다. 제대로 작동하면 추가 비트를자를 필요가 있습니다. 그러나 우리는 끝날 때까지 그렇게하고 싶지 않습니다!

이미 회전 된 A가 예제에 표시되었다는 사실에 대한 기사도 분명하지 않았습니다.