По необходимости кодирования
При многих методах шифрования зашифрованный текст , то есть зашифрованная форма сообщения, представляет собой массив байтов , т.е. если рассматривать как последовательность "символов", зашифрованный текст может содержать любой символ между 0 и 255 (десятичное) или $ 00 и $ FF (шестнадцатеричное). Такой диапазон символов включает в себя множество непечатаемых символов, например, «tab» или «eot», а также символы с кодом выше 128, интерпретация которых может различаться.
Кроме того, даже не учитывая эти непечатаемые или не-ASCII-символы, некоторые символы в зашифрованном тексте могут быть такими, что они «отбрасывают» интерпретацию возможного формата, в котором включен зашифрованный текст (как для пример XML, как подсказано в вопросе).
По этой причине зашифрованный текст часто должен кодироваться , чтобы его можно было распечатать или включить в тексто-ориентированные контейнеры.
Все кодирование (от двоичного до текстоподобного формата) приводит к использованию большего пространства для закодированной формы данных. Base64 - популярный формат, потому что он относительно компактен.
Другим возможным форматом кодирования является шестнадцатеричный («база 16»), который занимает вдвое больший размер, чем исходные двоичные данные. Шестнадцатеричный также проще / проще в использовании, поскольку существует прямое отображение между любым байтом на входе и его двумя соответствующими символами на выходе. (при этом Base64 использует 1,25 символа для кодирования одного байта, что приводит к блокам из 3 входных байтов для закодированных байтов)
О необходимости «побега» закодированных данных
После того как зашифрованный текст закодирован, он все еще может содержать символы, допускающие отбрасывание структуры «внешнего» формата, в который включен зашифрованный текст, и поэтому в случае XML вы можете захотеть «экранировать» этот контент как CDATA. (Это не обязательно с шестнадцатеричным и может не потребоваться в Base64, в зависимости от двух дополнительных используемых символов (Base64 использует от 0 до 9, от A до Z, от th до z и два дополнительных символа, обычно + и /, а также =).
О необходимости хранения данных в базе данных как Base64 (или другая кодировка)
Люди используют Base64 (или аналогичные кодировки) для хранения данных в базах данных по двум причинам:
- для введения [слабого / слабого] шифрования, для данных, которые легко доступны в текстовом виде . Это слабая форма шифрования, так как кто-то может быстро определить кодировку. Тем не менее, это делает хранимые данные менее «очевидными».
- для хранения данных в двоичном виде в формате TEXT.
Большинство СУБД включают в себя типы данных, которые позволяют хранить последовательности байтов в двоичном формате, и поэтому нет необходимости использовать кодирование и хранение в формате текстового типа. Тем не менее, есть много причин, по которым люди все еще могут сохранять текст:
- потому что данные в конечном итоге передаются / используются в качестве закодированного текста (нет необходимости шифровать во время выполнения, просто шифруйте один раз при сохранении данных)
- для облегчения переносимости
- для облегчения отладки