Frage

Ich habe einige Dokumente über MD5 gelesen, es heißt, dass seine 128 Bits, aber warum sind es 32 Zeichen? Ich kann die Charaktere nicht berechnen.

  • 1 Byte ist 8 Bit
  • Wenn 1 Charakter 1 Byte ist
  • Dann sind 128 Bit 128/8 = 16 Bytes richtig?

BEARBEITEN:

SHA-1 produziert 160 Bit. Wie viele Charaktere gibt es also?

War es hilfreich?

Lösung

32 Chars als Hexdecimal Repräsentation, das 2 Chars pro Byte.

Andere Tipps

Ich wollte einige der Antworten in einem Beitrag.

Denken Sie zunächst nicht an den MD5 -Hash als eine Zeichenzeichenfolge, sondern als Hex -Nummer. Daher ist jede Ziffer eine Hex-Ziffer (0-15 oder 0-F) und stellt vier Bits dar, nicht acht.

Ein Byte oder acht Bits werden durch zwei Sechskantigstellen, z. B. dargestellt, dargestellt, z. B.1111 1111' = 0xFF = 255.

MD5 -Hashes sind 128 Bit in Länge und werden im Allgemeinen durch 32 Sechskantigstellen dargestellt.

SHA-1-Hashes sind 160 Bit lang und werden im Allgemeinen durch 40 Hex-Ziffern dargestellt.

Für die SHA-2-Familie denke ich, dass die Hash-Länge einer einer vorbestimmten Set sein kann. SHA-512 kann also durch 128 Sechskantigstellen dargestellt werden.

Auch dieser Beitrag basiert nur auf früheren Antworten.

Ein Hex "Charakter" (Knabbern) unterscheidet sich von einem "Charakter"

Um auf den Bits vs Byte, gegen Zeichen klar zu sein, klar sein.

  • 1 Byte ist 8 Bit (für unsere Zwecke)
  • 8 Bits bietet 2**8 Mögliche Kombinationen: 256 Kombinationen

Wenn Sie sich eine ansehen Sechskantcharakter,

  • 16 Kombinationen von [0-9] + [a-f]: die volle Palette von 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
  • 16 ist weniger als 256, also eine Sechskantcharakter tut also nicht Lagern Sie ein Byte.
  • 16 ist 2**4: Das bedeutet, dass ein Hex -Charakter 4 Bit in einem Byte (ein halbes Byte) speichern kann.
  • Daher können zwei Hex -Charaktere 8 Bit speichern, 2**8 Kombinationen.
  • Ein Byte, der als Sechskantcharakter dargestellt wird, ist [0-9a-f][0-9a-f] und das repräsentiert beide Hälfte eines Byte (wir nennen eine halbe Byte a knabbern).

Wenn Sie sich eine ansehen regulärer Single-Byte-Charakter, (Wir werden hier Multi-Byte- und Weitcharakteres total überspringen)

  • Es kann weit mehr als 16 Kombinationen speichern.
  • Die Fähigkeiten der Charakter werden durch die bestimmt Codierung. Zum Beispiel die ISO 8859-1, das ein ganzes Byte speichert, speichert all dieses Zeug
  • All das Zeug nimmt das ganze Zeug 2**8 Angebot.
  • Wenn ein Hex-Charakter in einem md5() Könnte alles speichern, Sie würden alle Kleinbuchstaben, alle Großbuchstaben, alle Interpunktionen und Dinge wie sehen ¡°ÀÐàð, weißespace wie (Newlines und Tabs) und steuern Zeichen (die Sie nicht einmal sehen können und von denen viele nicht verwendet werden).

Sie sind also eindeutig unterschiedlich und ich hoffe, dass dies die beste Unterscheidung der Unterschiede bietet.

MD5 liefert Hexadezimalstellen (0-15 / 0-F), sodass sie jeweils vier Bits sind. 128/4 = 32 Zeichen.

SHA-1 liefert auch Hexadezimalstellen (0-15 / 0-F), also 160/4 = 40 Zeichen.

(Da sie mathematische Operationen sind, wird die Ausgabe der meisten Hashing -Funktionen üblicherweise als Sechskantig dargestellt.)

Sie haben wahrscheinlich an ASCII -Textzeichen gedacht, die 8 Bit sind.

Das sind 32 Hex -Charaktere - 1 Hex -Charakter ist 4 Bit.

Das sind hexidezimale Ziffern, keine Charaktere. Eine Ziffer = 4 Bit.

Sie sind eigentlich keine Charaktere, sie sind hexadezimale Ziffern.

Eine Sechskantendigit = 1 knabbern (vier Bits)

Zwei Sechskantigstellen = 1 Byte (acht Bit)

MD5 = 32 Sechsziffern

32 Hex -Ziffern = 16 Bytes (32/2)

16 Bytes = 128 Bit (16 * 8)

Gleiches gilt für SHA-1, außer dass es 40 Hex-Ziffern lang ist.

Ich hoffe das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top