MD5 adalah 128 bit tetapi mengapa 32 karakter?

95

Saya membaca beberapa dokumen tentang md5, dikatakan 128 bit, tetapi mengapa 32 karakter? Saya tidak bisa menghitung karakternya.

  • 1 byte adalah 8 bit
  • jika 1 karakter adalah 1 byte
  • maka 128 bit adalah 128/8 = 16 byte kan?

EDIT:

SHA-1 menghasilkan 160 bit, jadi ada berapa karakter?

hash_jr90
sumber
Bisakah Anda memposting link ke dokumen yang Anda rujuk?
Don Roby
@don: Maaf, ini catatan dosen saya. Tapi ba__friend telah menjawab pertanyaan saya, dan saya mengujinya di sini: miraclesalad.com/webtools/md5.php , dan karakternya yang benar-benar heksadesimal saja, sekarang lebih masuk akal bagi saya. Saya akan memilih jawabannya sebagai jawaban terbaik
hash_jr90
Saya pikir jawaban saya menjelaskan hal ini lebih rinci daripada yang lain. Jika Anda baru mengenal pemrograman komputer dan mengajukan pertanyaan ini dan menginginkan jawaban yang
menyeluruh
9
Ini bukan pertanyaan yang konyol. Suatu ketika Anda juga tidak tahu berapa banyak karakter HEX yang mewakili satu byte.
David Klempfner
Sebuah python one liner cepat untuk menghitung panjang bit hash adalah di ((1 << (n*4))-1).bit_length()mana n adalah panjang hash dalam heksadesimal
Wouterr

Jawaban:

107

32 karakter sebagai representasi heksadesimal, itu berarti 2 karakter per byte.

ba__friend
sumber
1
1 byte diwakili oleh dua digit angka heksadesimal, seperti 255 = ff.
ba__friend
1
jadi 1 byte adalah 2 karakter yang berarti 16 bit adalah 2 karakter kemudian 128/16 = 8. Jadi diperlukan 8 dari 2 karakter = 16 karakter? Mengapa 32?
Koray Tugay
15
Karena setiap karakter hex dapat diwakili oleh 4 bit. Jadi jika 128 bit itu adalah 128/4 = 32 karakter hex. Meskipun setiap "char" akan dikodekan sebagai utf8 atau ascii yang akan membuat ukuran representasi hex 32 * 8 = 256 bit.
Gaston Sanchez
2
Ini adalah jawaban yang sangat buruk. Jawaban saya membahas detail tentang ini: stackoverflow.com/a/41618070/124486
Evan Carroll
@KorayTugay "jadi 1 byte adalah 2 karakter yang berarti 16 bit adalah 2 karakter" - 1 byte! = 16 bit.
David Klempfner
36

Saya ingin menambahkan beberapa jawaban ke dalam satu posting.

Pertama, jangan anggap hash MD5 sebagai string karakter tetapi sebagai nomor hex. Oleh karena itu, setiap digit adalah digit hex (0-15 atau 0-F) dan mewakili empat bit, bukan delapan.

Lebih jauh lagi, satu byte atau delapan bit diwakili oleh dua digit hex, misalnya b ' 1111 1111' = 0xFF= 255.

Hash MD5 memiliki panjang 128 bit dan umumnya diwakili oleh 32 digit hex.

Hash SHA-1 memiliki panjang 160 bit dan umumnya diwakili oleh 40 digit hex.

Untuk keluarga SHA-2, menurut saya panjang hash bisa menjadi salah satu set yang ditentukan sebelumnya. Jadi SHA-512 dapat diwakili oleh 128 digit hex.

Sekali lagi, posting ini hanya berdasarkan jawaban sebelumnya.

RepentantFan
sumber
26

Sebuah "karakter" hex (menggigit) berbeda dari "karakter"

Untuk memperjelas bit vs byte, karakter vs.

  • 1 byte adalah 8 bit (untuk tujuan kita)
  • 8 bit memberikan 2**8kemungkinan kombinasi: 256 kombinasi

Saat Anda melihat karakter hex,

  • 16 kombinasi dari [0-9] + [a-f]: rangkaian lengkap0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
  • 16 kurang dari 256, jadi satu karakter hex tidak menyimpan satu byte.
  • 16 adalah 2**4: itu berarti satu karakter hex dapat menyimpan 4 bit dalam satu byte (setengah byte).
  • Oleh karena itu, dua karakter hex, dapat menyimpan 8 bit, 2**8kombinasi.
  • Sebuah byte direpresentasikan sebagai karakter hex adalah [0-9a-f][0-9a-f]dan itu mewakili kedua setengah byte (kita sebut setengah byte sebuah nibble ).

Saat Anda melihat karakter byte tunggal biasa, (kami benar-benar akan melewatkan karakter multi-byte dan lebar di sini)

  • Ini dapat menyimpan lebih dari 16 kombinasi.
  • Kemampuan karakter ditentukan oleh pengkodean. Misalnya, ISO 8859-1 yang menyimpan seluruh byte, menyimpan semua hal ini
  • Semua hal itu mengambil seluruh 2**8jangkauan.
  • Jika karakter hex dalam md5()dapat menyimpan semua itu, Anda akan melihat semua huruf kecil, semua huruf besar, semua tanda baca dan hal-hal seperti ¡°ÀÐàð, spasi kosong seperti (baris baru, dan tab), dan karakter kontrol (yang Anda bisa ' t bahkan melihat dan banyak yang tidak digunakan).

Jadi mereka jelas berbeda dan saya harap itu memberikan pengelompokan terbaik dari perbedaan tersebut.

Evan Carroll
sumber
1
Apa sebenarnya maksud dari "Di urutan mana sebenarnya spesifikasi atau platform bergantung"? Akan sangat senang melihat ini dijelaskan lebih banyak.
KumarM
@KumarM Saya akan menghapusnya karena menurut saya itu tidak benar-benar relevan dengan percakapan sama sekali, dan kata-katanya jelek.
Evan Carroll
22

MD5 menghasilkan digit heksadesimal (0-15 / 0-F), jadi masing-masing empat bit. 128/4 = 32 karakter.

SHA-1 juga menghasilkan digit heksadesimal (0-15 / 0-F), jadi 160/4 = 40 karakter.

(Karena ini adalah operasi matematika, sebagian besar keluaran fungsi hashing biasanya direpresentasikan sebagai digit hex.)

Anda mungkin berpikir tentang karakter teks ASCII, yaitu 8 bit.

Pria bijak
sumber
terima kasih banyak .. aku punya gambaran yang lebih jelas di kepalaku sekarang !!
hash_jr90
catatan: ascii-charset berisi simbol yang tidak dapat dicetak.
Roy Lee
Saya mencoba memecah ini sedikit lebih eksplisit stackoverflow.com/a/41618070/124486
Evan Carroll
9

Itu 32 karakter hex - 1 karakter hex adalah 4 bit.

Brett Thomas
sumber
2

Itu adalah angka heksadesimal, bukan karakter. Satu digit = 4 bit.

eaolson
sumber
2

Mereka sebenarnya bukan karakter, melainkan digit heksadesimal.

Jack Edmonds
sumber
2

Satu digit hex = 1 gigitan (empat-bit)

Dua digit hex = 1 byte (delapan-bit)

MD5 = 32 digit hex

32 digit hex = 16 byte (32/2)

16 byte = 128 bit (16 * 8)

Hal yang sama berlaku untuk SHA-1 kecuali panjangnya 40 digit hex.

Saya harap ini membantu.

Hujan
sumber