MD5는 128 비트인데 왜 32 자입니까?


95

md5에 대한 문서를 읽었는데 128 비트라고했는데 왜 32 자인가요? 문자를 계산할 수 없습니다.

  • 1 바이트는 8 비트입니다.
  • 1 문자가 1 바이트 인 경우
  • 128 비트는 128/8 = 16 바이트 맞죠?

편집하다:

SHA-1은 160 비트를 생성하는데 몇 개의 문자가 있습니까?


참조하는 문서에 대한 링크를 게시 할 수 있습니까?
Don Roby

@don : 죄송합니다, 제 강사 노트입니다. 그러나 ba__friend가 내 질문에 답했으며 여기에서 테스트합니다 : miraclesalad.com/webtools/md5.php , 그리고 실제로는 16 진수 문자로만 가능합니다. 내가 가장 좋은 대답으로 그의 대답을 투표 할 것이다
hash_jr90

내 대답은 다른 것보다 이것에 대해 더 자세히 설명되어 있다고 생각합니다. 컴퓨터 프로그래밍을 처음
Evan Carroll

9
어리석은 질문이 아닙니다. 옛날에 당신은 또한 얼마나 많은 HEX 문자가 1 바이트를 나타내는 지 알지 못했습니다.
David Klempfner

해시의 비트 길이를 계산하는 빠른 파이썬 한 라이너는 ((1 << (n*4))-1).bit_length()n이 16 진수로 된 해시의 길이입니다
Wouterr

답변:


107

16 진수 표현으로 32 자, 즉 바이트 당 2 자입니다.


1
1 바이트는 255 = ff와 같이 두 자리 16 진수로 표시됩니다.
ba__friend

1
따라서 1 바이트는 2 문자입니다. 즉, 16 비트는 2 문자이고 128/16 = 8입니다. 그러면 2 문자 중 8 문자 = 16 문자가 필요합니까? 왜 32입니까?
Koray 투 케이

15
각 16 진수 문자는 4 비트로 표현 될 수 있기 때문입니다. 따라서 128 비트이면 128/4 = 32 16 진수 문자입니다. 비록 각 "char"는 utf8 또는 ascii로 인코딩되어 16 진 표현 크기가 32 * 8 = 256 비트가됩니다.
Gaston Sanchez

2
이것은 정말 좋지 않은 대답입니다. 내 대답이에 대한 자세한로 전환 : stackoverflow.com/a/41618070/124486
에반 캐롤

@KorayTugay "그래서 1 바이트는 2 문자, 즉 16 비트는 2 문자입니다"-1 바이트! = 16 비트.
David Klempfner

36

일부 답변을 하나의 게시물로 정리하고 싶었습니다.

먼저 MD5 해시를 문자열이 아니라 16 진수로 생각하십시오. 따라서 각 숫자는 16 진수 (0-15 또는 0-F)이며 8이 아닌 4 비트를 나타냅니다.

더 나아가 1 바이트 또는 8 비트는 2 개의 16 진수 숫자로 표시됩니다. 예를 들어 b ' 1111 1111'= 0xFF= 255.

MD5 해시는 길이가 128 비트이며 일반적으로 32 개의 16 진수로 표시됩니다.

SHA-1 해시는 길이가 160 비트이며 일반적으로 40 개의 16 진수로 표시됩니다.

SHA-2 제품군의 경우 해시 길이가 미리 결정된 집합 중 하나 일 수 있다고 생각합니다. 따라서 SHA-512는 128 개의 16 진수로 나타낼 수 있습니다.

다시 말하지만이 게시물은 이전 답변을 기반으로합니다.


26

16 진수 "문자"(니블)는 "문자"와 다릅니다.

비트 대 바이트, 문자에 대해 명확하게.

  • 1 바이트는 8 비트입니다.
  • 8 비트는 2**8가능한 조합을 제공 합니다 : 256 개의 조합

16 진수 문자 를 보면

  • 16 가지 조합 [0-9] + [a-f]: 전체 범위0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
  • 16은 256보다 작으므로 하나의 16 진수 문자는 바이트를 저장 하지 않습니다 .
  • 16은 2**4하나의 16 진수 문자가 한 바이트 (반 바이트)에 4 비트를 저장할 수 있음을 의미합니다.
  • 따라서 두 개의 16 진수 문자는 8 비트 2**8조합을 저장할 수 있습니다 .
  • 16 진수 문자로 표현 된 바이트는 [0-9a-f][0-9a-f]이고 이는 바이트의 절반을 모두 나타냅니다 (우리는 절반 바이트를 니블 이라고 부릅니다 ).

일반 1 바이트 문자 를 볼 때 (여기서는 멀티 바이트 및 와이드 문자를 완전히 건너 뛸 것입니다)

  • 16 개 이상의 조합을 저장할 수 있습니다.
  • 문자 의 기능은 인코딩에 의해 결정됩니다 . 예를 들어, 전체 바이트를 저장하는 ISO 8859-1은이 모든 것을 저장합니다.
  • 그 모든 것이 전체 2**8범위를 차지합니다 .
  • 의 16 진수 문자가 md5()모든 것을 저장할 수 있다면 모든 소문자, 모든 대문자, 모든 구두점 및 ¡°ÀÐàð, 같은 공백 (줄 바꿈 및 탭), 제어 문자 (할 수 있음)를 볼 수 있습니다. t는 보거나 사용하지 않습니다).

그래서 그들은 분명히 다르며 차이점을 가장 잘 분석 할 수 있기를 바랍니다.


1
"실제로 사양 또는 플랫폼에 따라 어떤 순서로 진행됩니까?"는 실제로 무엇을 의미합니까? 이것이 좀 더 설명되는 것을보고 싶습니다.
KumarM

@KumarM 나는 그것이 실제로 대화와 전혀 관련이 없다고 생각하기 때문에 그것을 삭제할 것입니다.
Evan Carroll

22

MD5는 16 진수 (0-15 / 0-F)를 산출하므로 각각 4 비트입니다. 128/4 = 32 자.

SHA-1도 16 진수 (0-15 / 0-F)를 생성하므로 160/4 = 40 자입니다.

(수학적 연산이므로 대부분의 해싱 함수 출력은 일반적으로 16 진수로 표시됩니다.)

아마도 8 비트 인 ASCII 텍스트 문자를 생각하고 계셨을 것입니다.


정말 고마워요 .. 이제 머릿속이 훨씬 더 선명 해졌습니다 !!
hash_jr90 2011-06-11

참고 : ascii-charset에는 인쇄 할 수없는 기호가 포함되어 있습니다.
로이 리

나는 좀 더 명시 적으로 다운이 침입하려고 stackoverflow.com/a/41618070/124486
에반 캐롤




2

16 진수 1 개 = 니블 1 개 (4 비트)

두 16 진수 = 1 바이트 (8 비트)

MD5 = 16 진수 32 자리

16 진수 32 자리 = 16 바이트 (32/2)

16 바이트 = 128 비트 (16 * 8)

SHA-1에도 동일하게 적용됩니다. 단 40 자리 16 진수입니다.

이게 도움이 되길 바란다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.