Ответ 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 равнозначных знака не добавляют никакой информации к строке и могут быть отброшены при хранении.