Почему не декодируется base64 из склеенных строк?

255
08 декабря 2017, 01:44

Доброго всем! Есть строка, которая выдает ошибку при конвертации:

0JTQsNGA0LjQvCDRgdC60LjQtNC60YMg0L3QsCDQvdC+0LLQvtCz0L4=0LTQvdC40LUg0L/QvtC00LDRgNC60Lgh

При чем отдельные ее части:

0JTQsNGA0LjQvCDRgdC60LjQtNC60YMg0L3QsCDQvdC+0LLQvtCz0L4=

и

0LTQvdC40LUg0L/QvtC00LDRgNC60Lgh

Декодируются нормально, но если их соединить, то ошибка. Проверял себя через декодер Лебедева https://www.artlebedev.ru/decoder/advanced/

Как это можно решить?

Answer 1

Base64 конвертирует 3 байта в 4 символа, соответственно возникает проблема выравнивания длины байтов (набор байтов должен быть кратен 3), для чего и применяется символ (1 или 2) =, который как и написали в комментариях не может стоять в середине, а всегда в конце

Ваша исходная строка Дарим скидку на новогодние подарки! должна конвертироваться в строку:

0JTQsNGA0LjQvCDRgdC60LjQtNC60YMg0L3QsCDQvdC+0LLQvtCz0L7QtNC90LjQtSDQv9C+0LTQsNGA0LrQuCE=

которая, как нетрудно заметить слегка отличается от ваших строчек:

0JTQsNGA0LjQvCDRgdC60LjQtNC60YMg0L3QsCDQvdC+0LLQvtCz0L4=

0LTQvdC40LUg0L/QvtC00LDRgNC60Lgh

Короче говоря, нельзя просто так и взять конкатенировать base64 строки

READ ALSO
Замена слова/подстроки в строке из Dictionary (Regex IgnoreCase?)

Замена слова/подстроки в строке из Dictionary (Regex IgnoreCase?)

ЗдравствуйтеИмеется строка, например:

390
SVG-графика (.NET, C#)

SVG-графика (.NET, C#)

Имеется xml-документ с несколькими элементами rect и lineВозможно ли получить доступ к редактированию любого из этих элементов при открытии соответствующего...

243
Список посещенных сайтов

Список посещенных сайтов

Пытаюсь сделать программу для отображения списка посещенных сайтовИдея такова, что пользователи пользуясь браузерами, все сайты сохранялись...

244
Функционал граф. векторного редактора

Функционал граф. векторного редактора

Нужно дополнить простой существующий графредактор новым функционалом: сохранение и загрузка фигур в векторном представлении

190