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

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

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

편집하다:

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



답변

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


답변

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

먼저 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 진수로 나타낼 수 있습니다.

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


답변

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는 보거나 사용하지 않습니다).

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


답변

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

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

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

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


답변

32 개의 16 진수 문자입니다. 1 개의 16 진수 문자는 4 비트입니다.


답변

문자가 아닌 16 진수입니다. 한 자리 = 4 비트.


답변

실제로 문자가 아니라 16 진수입니다.