Frage

Wenn ich einen 32-stellige Zeichenfolge (eine MD5-Hash) und ich kodieren Base64 verwenden, was ist die maximun Länge des codierten Zeichenfolge?

War es hilfreich?

Lösung

Ein MD5-Wert immer 22 (Nutz-) Zeichen lang in Base64 Notation. Viele Base64-Algorithmen werden auch append 2 Zeichen der Polsterung beim Encodieren einen MD5-Hash, die insgesamt 24 Zeichen zu bringen. Die Polsterung fügt keine nützlichen Informationen und kann verworfen werden. Nur die ersten 22 Zeichen wichtig sind.

Hier ist der Grund:

ein MD5-Hash ist ein 128-Bit-Wert. Jedes Zeichen in einer Base64-Zeichenfolge enthält 6 Bits an Informationen, weil es 64 mögliche Werte für den Charakter, und es dauert 6 Potenzen von 2 64. Mit 6 Bits an Informationen in jedem Charakter zu erreichen, 21 Zeichen 126 Bits an Informationen hat, und 22 Zeichen enthalten 132 Bits an Informationen. Da 128 Bits nicht innerhalb von 21 Zeichen passen tun, sondern paßt in 22 Zeichen (mit einem wenig Raum zu ersparen), ein 128-Bit-Wert wird immer als 22 Zeichen in Base64 dargestellt werden.

Ein Hinweis auf die padding:

ich bereits erwähnt, dass viele Base64 codiert, Algorithmen ein paar Zeichen der Polsterung hinzu, wenn ein MD5-Wert kodiert. Dies liegt daran, Base64 stellt 3 Bytes von Informationen als 4 Zeichen. Da MD5 16 Bytes von Informationen hat, viele Base64 Codieralgorithmen append „==“ zu bezeichnen, dass die Eingabe von 16 Bytes betrug 2 Bytes kurz von dem nächsten Vielfachen von 3, die 18 Bytes gewesen wäre. Diese 2 Gleichheitszeichen hinzufügen, keinerlei Informationen an die Schnur, und kann verworfen werden, wenn zu speichern.

Andere Tipps

Wie pro http://en.wikipedia.org/wiki/Base64

"zu beachten, dass eine Eingabe von bestimmten n Bytes, wird der Ausgang sein (n + 2 - ((n + 2)% 3)) / 3 * 4 Bytes lang, die konvergent zu n * 4/3 oder 1.33333n für große n. "

So wird es sein ((32 + 2 - (32 + 2)% 3)) / 3 * 4 = 34 - (34% 3) / 3 * 4 = (34 - 1) / 3 * 4 = 33/3 * 4 = 44 Zeichen.

Man könnte immer es in rohen Binärform extrahiert (128 Bits) und codieren sie direkt in der Basis 64, die Mittel 16 Bytes statt 32 umwandelt, die 24 Bytes wird als Basis 64 codiert wird.

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