Czytałem kilka dokumentów o md5, napisano, że ma 128 bitów, ale dlaczego ma 32 znaki? Nie mogę obliczyć znaków.
- 1 bajt to 8 bitów
- jeśli 1 znak to 1 bajt
- to 128 bitów to 128/8 = 16 bajtów, prawda?
EDYTOWAĆ:
SHA-1 produkuje 160 bitów, więc ile jest znaków?
hash
cryptography
md5
cryptographic-hash-function
hash_jr90
źródło
źródło
((1 << (n*4))-1).bit_length()
gdzie n jest długością skrótu w systemie szesnastkowymOdpowiedzi:
32 znaki jako reprezentacja szesnastkowa, czyli 2 znaki na bajt.
źródło
Chciałem podsumować niektóre odpowiedzi w jednym poście.
Po pierwsze, nie myśl o skrócie MD5 jako o ciągu znaków, ale o liczbie szesnastkowej. Dlatego każda cyfra jest cyfrą szesnastkową (0-15 lub 0-F) i reprezentuje cztery bity, a nie osiem.
Idąc dalej, jeden bajt lub osiem bitów jest reprezentowanych przez dwie cyfry szesnastkowe, np. B '
1111 1111
' =0xFF
=255
.Skrót MD5 ma 128 bitów długości i jest generalnie reprezentowany przez 32 cyfry szesnastkowe.
Skrót SHA-1 ma długość 160 bitów i jest generalnie reprezentowany przez 40 cyfr szesnastkowych.
Myślę, że dla rodziny SHA-2 długość skrótu może być jednym z wcześniej określonego zestawu. Zatem SHA-512 można przedstawić za pomocą 128 cyfr szesnastkowych.
Ponownie, ten post jest oparty tylko na poprzednich odpowiedziach.
źródło
„Znak” szesnastkowy (półbajt) różni się od „znaku”
Aby wyjaśnić kwestię bitów, bajtów, znaków.
2**8
możliwe kombinacje: 256 kombinacjiKiedy patrzysz na znak szesnastkowy,
[0-9] + [a-f]
: pełen zakres0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
2**4
: to znaczy, że jeden znak szesnastkowy może przechowywać 4 bity w bajcie (pół bajtu).2**8
kombinacje.[0-9a-f][0-9a-f]
i który reprezentuje obie połowy bajtu (pół bajta nazywamy półbajtem ).Kiedy patrzysz na zwykły znak jednobajtowy (całkowicie pominiemy tutaj znaki wielobajtowe i szerokie)
2**8
zakres.md5()
mógł przechowywać to wszystko, zobaczyłbyś wszystkie małe litery, wszystkie wielkie litery, wszystkie znaki interpunkcyjne i inne elementy, takie jak¡°ÀÐàð
białe spacje (nowe linie i tabulatory) oraz znaki kontrolne (które możesz nawet nie widzę, a wiele z nich nie jest używanych).Więc są one wyraźnie różne i mam nadzieję, że to najlepsze zestawienie różnic.
źródło
MD5 daje cyfry szesnastkowe (0-15 / 0-F), więc każda z nich ma cztery bity. 128/4 = 32 znaki.
SHA-1 daje również cyfry szesnastkowe (0-15 / 0-F), więc 160/4 = 40 znaków.
(Ponieważ są to operacje matematyczne, wynik większości funkcji haszujących jest zwykle reprezentowany jako cyfry szesnastkowe).
Prawdopodobnie myślałeś o znakach tekstowych ASCII, które mają 8 bitów.
źródło
To 32 znaki szesnastkowe - 1 znak szesnastkowy to 4 bity.
źródło
Jedna cyfra szesnastkowa = 1 półbajt (cztery bity)
Dwie cyfry szesnastkowe = 1 bajt (osiem bitów)
MD5 = 32 cyfry szesnastkowe
32 cyfry szesnastkowe = 16 bajtów (32/2)
16 bajtów = 128 bitów (16 * 8)
To samo dotyczy SHA-1, z wyjątkiem tego, że ma 40 cyfr szesnastkowych.
Mam nadzieję, że to pomoże.
źródło
To są cyfry szesnastkowe, a nie znaki. Jedna cyfra = 4 bity.
źródło
W rzeczywistości nie są to znaki, są to cyfry szesnastkowe.
źródło