Хеш-хеш MD5 и Base64 кодировка
-
28-09-2019 - |
Вопрос
Если у меня есть 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.