2012-03-14 3 views
10

Md5 해시 알고리즘을 이해해야합니다. (비트)의 길이가 448 합동 수 있도록 "(확장) 패딩"메시지는 "나는 문서를 읽고 있었다 그것은MD5 해시 알고리즘 안쪽 여백

을 상태이며, 모듈로 512, 메시지가 너무 그것은 그 연장메시지의 길이가 이 이미 448, 512로 합쳐진 경우에도 항상 채우기가 수행됩니다. "

이 용어가 의미하는 것, 특히 448 모듈로 512를 이해해야합니다. MODULO라는 단어가 문제입니다. 이 점에 대한 간단한 예를 들어 주시면 감사하겠습니다. 재미 있긴하지만 이것은 MD5 해시의 첫 번째 단계입니다! :)

감사

답변

10

모듈로 또는 모드는 두 개의 숫자가 서로 나눈 때 당신에게 나머지를 말하는 초래하는 기능입니다.

모듈 5 : 3 : 1 =

5/3, 나머지 2 예

. 그래서 5 mod 3은 2가됩니다. 왜냐하면 16을 만들 수 없기 때문입니다.

10 modulo 16 = 10입니다.

15는 5를 정확히 3 회하기 때문에 모듈로 5 = 0입니다. 15는 5의 배수입니다.

학교에서 "Remainder"또는 "Left Over"로 배웠을 때, 모듈러스는 말할 수있는 멋진 방법입니다.

여기서 말하는 것은 MD5를 사용할 때 가장 먼저 발생하는 것 중 하나가 메시지를 덧붙여 길게 길어지는 것입니다. MD5의 경우 메시지는 n 비트 여야합니다. 여기서 n = (512 * z) +448이고 z는 임의의 숫자입니다.

예를 들어, 1472 비트 길이의 파일이있는 경우 1472 mod 512 = 448이므로 MD5 해시로 사용할 수 있습니다. 파일 길이가 1400 비트 인 경우 나머지 MD5 알고리즘을 실행하기 전에 여분의 72 비트를 채워 넣어야합니다.

0

계수는 나머지 부분은입니다.

512 - 448*1 == 64 That's your modulus result. 
: 예에서

512 mod 448 = 64 
448 mod 512 = 448 

512 모드 (448)의 또 다른 방법은

는 그런 다음 448을 곱한 점 전에 결과 번호에서 512를 뺍니다 .. 그들에게 448분의 512 = 1.142를 분할하는 것

448이 여러 비트보다 64 비트 짧음을 알아야합니다.

448과 512 사이에 있다면 어떻게 될까요 ??

일반적으로 우리는 448을 x (모듈러스의 결과)로 뺄 필요가 있습니다.

447 mod 512 = 447; 448 - 447 = 1; (all good, 1 zero to pad) 

449 mod 512 = 1; 448 - 449 = -1 ??? 

그래서이 문제의 해결책은 512의 더 높은 배수를 취하는 것이지만 여전히 64보다 짧습니다. 이후 우리는 64 비트 원본 메시지와 전체 길이를 추가해야하기 때문에이 문제가 발생

512*2 - 64 = 960 
449 mod 512 = 1; 960 - 449 = 511; 

512

960 - 449 = 511; 
511 + 449 + 64 = 1024; 
1024 is multiple of 512; 
의 복수해야