Domanda

Ho letto alcuni documenti su md5, ha detto che i suoi 128 bit, ma perché è 32 caratteri? Non riesco a calcolare i caratteri.

  • 1 byte è 8 bit
  • se 1 carattere è 1 byte
  • allora 128 bit è 128/8 = 16 byte corrette

EDIT:

SHA-1 produce 160 bit, così quanti caratteri sono?

È stato utile?

Soluzione

32 caratteri come rappresentazione esadecimale, che è 2 caratteri per byte. |

Altri suggerimenti

Volevo summerize alcune delle risposte in un unico post.

In primo luogo, non credo di hash MD5 come stringa di caratteri, ma come un numero esadecimale. Pertanto, ogni cifra è una cifra esadecimale (0-15 o 0-F) e rappresenta quattro bit, non otto.

Prendendo che ulteriori, un byte o otto bit sono rappresentati da due cifre esadecimali, ad esempio b'1111 1111'= 0xFF = 255.

hash

MD5 sono 128 bit di lunghezza e generalmente rappresentate da 32 cifre esadecimali.

hash SHA-1 sono 160 bit di lunghezza e generalmente rappresentate da 40 cifre esadecimali.

Per la famiglia SHA-2, penso che la lunghezza hash può essere uno di una serie di pre-determinato. Quindi, SHA-512 può essere rappresentato da 128 cifre esadecimali.

Ancora una volta, questo post è solo sulla base di risposte precedenti.

Un esagono "carattere" (nibble) è diverso da un "carattere"

Per essere chiari sui bit vs byte, vs caratteri.

  • 1 byte è 8 bit (per i nostri scopi)
  • 8 bit fornisce 2**8 possibili combinazioni: 256 combinazioni

Quando si guarda a un carattere esadecimale,

  • 16 combinazioni di [0-9] + [a-f]: la gamma completa di 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
  • 16 è inferiore a 256, quindi un carattere di un esagono fa non memorizzare un byte.
  • 16 è 2**4:. Tale carattere mezzi di un esagono può memorizzare 4 bit in un byte (mezzo byte)
  • Pertanto, due caratteri esadecimali, può immagazzinare 8 bit, combinazioni 2**8.
  • Un byte rappresentato come un carattere esadecimale è [0-9a-f][0-9a-f] e che rappresenta due halfs di un byte (chiamiamo un mezzo byte un nibble ).

Quando si guarda a un regolare carattere a singolo byte, (Siamo totalmente andando a saltare multi-byte e di ampia personaggi qui)

  • Può memorizzare molto di più di 16 combinazioni.
  • Le capacità del carattere sono determinati dalla codificante. Ad esempio, il ISO 8859-1 che memorizza un intero byte, memorizza tutta questa roba
  • Tutta quella roba prende l'intera gamma 2**8.
  • Se un esagono caratteri in un md5() potrebbe memorizzare tutti che, vedreste tutte le lettere minuscole, tutte le lettere maiuscole, tutta la punteggiatura e cose del genere, ¡°ÀÐàð spazi come (a capo, e le schede), e caratteri di controllo (che non si può nemmeno vedere e molti dei quali non sono in uso).

Quindi sono chiaramente diverso e spero che fornisce la migliore ripartizione delle differenze.

MD5 produce cifre esadecimali (0-15 / 0-F), quindi sono quattro bit ciascuno. 128/4 = 32 caratteri.

cifre SHA-1 rendimenti esadecimali troppo (0-15 / 0-F), quindi 160/4 = 40 caratteri.

(dato che sono operazioni matematiche, uscita maggior parte delle funzioni di hash è comunemente rappresentato come cifre esadecimali.)

Si erano probabilmente pensando di caratteri di testo ASCII, che sono 8 bit.

Questo è 32 caratteri esadecimali - 1 carattere esadecimale è di 4 bit.

Queste sono cifre esadecimali, non caratteri. Una cifra = 4 bit.

Non sono in realtà i personaggi, sono cifre esadecimali.

Un esagono numerici = 1 nibble (quattro bit )

Due hex cifre = 1 byte (otto bit)

MD5 = 32 cifre esadecimali

32 hex cifre = 16 byte (32/2)

16 byte = 128 bit (16 * 8)

Lo stesso vale per SHA-1 tranne che è di 40 cifre esadecimali a lungo.

Spero che questo aiuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top