Вопрос

Если у меня есть 32 символьной строки (хэш MD5), и я кодирую его с помощью base64, какая длина максимуна кодированной строки?

Это было полезно?

Решение

Значение MD5 Всегда 22 (полезные) символы длинные в базовом нотам. Многие алгоритмы Base64 также добавит 2 символа прокладки при кодировании хеша MD5, приведя общее количество до 24 символов. Заслонки не добавляют полезную информацию и могут быть отброшены. Только первые 22 символа имеют значение.

Вот почему:

Хеш MD5 - это 128-битное значение. Каждый символ в строке Base64 содержит 6 битов информации, поскольку для персонажа 64 возможных значений, и требуется 6 мощностей 2 для достижения 64. С 6 битами информации в каждом персонаже 21 символов имеет 126 битов информации, И 22 символа содержит 132 бита информации. Поскольку 128 битов не могут вписаться в 21 символа, но входит в соответствие в 22 символа (с небольшим количеством доступа к запасному), 128-битное значение всегда будет представлено как 22 символа в Base64.

Примечание на прокладке:

Я упомянул выше, что многие алгоритмы кодирования Base64 добавляют пару символов прокладки при кодировании значения MD5. Это связано с тем, что Base64 представляет 3 байта информации как 4 символа. Поскольку MD5 имеет 16 байтов информации, многие алгоритмы кодирования Base64 добавляют «==» для обозначения того, что вход 16 байтов составлял 2 байта, кроме следующего нескольких кратного 3, что было бы 18 байт. Эти 2 равные знаки не добавляют никакой информации на строку и могут быть отброшены при хранении.

Другие советы

Согласно http://en.wikipedia.org/wiki/base64.

«Обратите внимание, что дано ввод n байтов, выход будет (n + 2 - ((n + 2)% 3)) / 3 * 4 байта длиннее, что сходится к N * 4/3 или 1,33333N для большого n "

Итак, это будет ((32 + 2 - (32 + 2)% 3)) / 3 * 4 = 34 - (34% 3) / 3 * 4 = (34 - 1) / 3 * 4 = 33/3 * 4 = 44 символа.

Вы всегда можете извлечь его в сырую двоичную форму (128 бит) и кодировать его непосредственно в базу 64, что означает преобразование 16 байтов вместо 32, что становится 24 байта при кодированном базе 64.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top