Для чего в base64 на конце == или = ?

adrin02
На сайте с 12.04.2006
Offline
85
1297

Добрый вечер! Заинтересовало почему в base64 на конце == или = ?

  switch (data.length % 3) {

case 1:
enc = enc.slice(0, -2) + '==';
break;
case 2:
enc = enc.slice(0, -1) + '=';
break;
}

Добавляются они в зависимости от длины, только для чего? Может кто объяснить?

Без == или = всё прекрасно может обратно раскодироваться.

Хостинг изображений (http://likepic.net) SpeedTest (http://speed-tester.info)
ДП
На сайте с 23.11.2009
Offline
203
#1

Думаю для того, чтобы точно знать, где конец сообщения. Типа, если == получили - то сообщение пришло целиком.

adrin02
На сайте с 12.04.2006
Offline
85
#2
Дикий пионер:
Думаю для того, чтобы точно знать, где конец сообщения. Типа, если == получили - то сообщение пришло целиком.

Конец явно не причём =) Исходя из кода можно понять, Что конец может быть "без =" "с =" и "с =="

Всё зависит от деления длины строки на 3 с остаткоком. Какой остаток, такое и окончание.

Только для чего это?

alexvaleev
На сайте с 04.02.2010
Offline
55
#3

Википедия нам говорит:

Для того, чтобы преобразовать данные в base64, первый байт помещается в самые старшие восемь бит 24-битного буфера, следующие в средние восемь и третий в младшие значащие восемь бит. Если кодируется менее чем три байта, то соответствующие биты буфера устанавливаются в ноль. Далее каждые шесть бит буфера, начиная с самых старших, используются как индексы строки «ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/» и её символы, на которые указывают индексы, помещаются в выходную строку. Если кодируются только один или два байта, используются только первые два или три символа строки и выходная строка дополняется двумя или одним символами «=». Это предотвращает добавление дополнительных битов к восстановленным данным. Процесс повторяется над оставшимися входными данными.
Блог (http://alexvaleev.ru) Всем роуп! (https://rujump.ru/)
n0name
На сайте с 22.12.2006
Offline
54
#4
alexvaleev:
Википедия нам говорит:

А если по-русски, то эти символы "=" добавляются точно для того же, для чего мы пишем

01.09.2011 вместо 1.9.2010

Сервис сравнения цена на VPS (http://vpska.com/)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий