Страницы

Поиск по вопросам

суббота, 23 марта 2019 г.

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

Доброго всем! Есть строка, которая выдает ошибку при конвертации:
0JTQsNGA0LjQvCDRgdC60LjQtNC60YMg0L3QsCDQvdC+0LLQvtCz0L4=0LTQvdC40LUg0L/QvtC00LDRgNC60Lgh
При чем отдельные ее части:
0JTQsNGA0LjQvCDRgdC60LjQtNC60YMg0L3QsCDQvdC+0LLQvtCz0L4=
и
0LTQvdC40LUg0L/QvtC00LDRgNC60Lgh
Декодируются нормально, но если их соединить, то ошибка. Проверял себя через декодер Лебедева https://www.artlebedev.ru/decoder/advanced/
Как это можно решить?


Ответ

Base64 конвертирует 3 байта в 4 символа, соответственно возникает проблема выравнивания длины байтов (набор байтов должен быть кратен 3), для чего и применяется символ (1 или 2) =, который как и написали в комментариях не может стоять в середине, а всегда в конце
Ваша исходная строка Дарим скидку на новогодние подарки! должна конвертироваться в строку:
0JTQsNGA0LjQvCDRgdC60LjQtNC60YMg0L3QsCDQvdC+0LLQvtCz0L7QtNC90LjQtSDQv9C+0LTQsNGA0LrQuCE=
которая, как нетрудно заметить слегка отличается от ваших строчек:
0JTQsNGA0LjQvCDRgdC60LjQtNC60YMg0L3QsCDQvdC+0LLQvtCz0L4= 0LTQvdC40LUg0L/QvtC00LDRgNC60Lgh
Короче говоря, нельзя просто так и взять конкатенировать base64 строки

Комментариев нет:

Отправить комментарий