Несколько лет назад, когда была введена функциональность почтовой рассылки, так что с течением времени она полностью основывалась на тексте, и возникла потребность в приложениях, таких как изображения и мультимедиа (аудио, видео и т. Д.). Когда эти вложения отправляются через Интернет (в основном в виде двоичных данных), вероятность повреждения двоичных данных в исходном виде высока. Итак, для решения этой проблемы пришел BASE64.
Проблема с двоичными данными состоит в том, что они содержат нулевые символы, которые в некоторых языках, таких как C, C ++, представляют конец символьной строки, поэтому отправка двоичных данных в необработанном виде, содержащем NULL-байты, не дает файлу полностью считываться и приводит к повреждению. данные.
Например:
В C и C ++ этот «нулевой» символ показывает конец строки. Таким образом, «Привет» хранится так:
H E L L O
72 69 76 76 79 00
00 говорит "остановись здесь".
Теперь давайте рассмотрим, как работает кодировка BASE64.
Обратите внимание: длина строки должна быть кратна 3.
Пример 1:
Строка для кодирования: «туз», длина = 3
1) Преобразовать каждый символ в десятичную.
а = 97, с = 99, е = 101
2) Заменить каждое десятичное на 8-битное двоичное представление.
97 = 01100001, 99 = 01100011, 101 = 01100101
Комбинировано: 01100001 01100011 01100101
3) Отдельно в группе 6 бит.
011000 010110 001101 100101
4) Рассчитать двоичное число в десятичное
011000 = 24, 010110 = 22, 001101 = 13, 100101 = 37
5) Преобразуйте десятичные символы в base64 с помощью диаграммы base64.
24 = Y, 22 = W, 13 = N, 37 = 1
«туз» => «YWNl»
Пример 2:
Строка для кодирования: «abcd» Length = 4, она не кратна 3. Поэтому, чтобы сделать длину строки кратной 3, мы должны добавить 2-битное заполнение, чтобы сделать length = 6. Бит заполнения представлен как «=» знак.
Следует отметить: один бит дополнения равен двум нулям 00, поэтому два бита дополнения равны четырем нулям 0000.
Итак, давайте запустим процесс: -
1) Преобразовать каждый символ в десятичную.
a = 97, b = 98, c = 99, d = 100
2) Заменить каждое десятичное на 8-битное двоичное представление.
97 = 01100001, 98 = 01100010, 99 = 01100011, 100 = 01100100
3) Разделить группу на 6 бит.
011000, 010110, 001001, 100011, 011001, 00
, поэтому последний 6-бит не является полным, поэтому мы вставляем два бита заполнения, равных четырем нулям «0000».
011000, 010110, 001001, 100011, 011001, 000000 ==
Теперь оно равно. Два знака равенства в конце показывают, что были добавлены 4 нуля (помогает при декодировании).
4) Рассчитать двоичные числа в десятичные.
011000 = 24, 010110 = 22, 001001 = 9, 100011 = 35, 011001 = 25, 000000 = 0 ==
5) Преобразование десятичных символов в base64 с использованием диаграммы base64.
24 = Y, 22 = W, 9 = j, 35 = j, 25 = Z, 0 = A ==
«abcd» => «YWJjZA ==»