Подтвердить что ты не робот

MD5 Хэш и Base64 кодирование

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

4b9b3361

Ответ 1

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

Вот почему:

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

Заметка о дополнении:

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

Ответ 2

По http://en.wikipedia.org/wiki/Base64

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

Таким образом, это будет ((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.