Кодирование 16-байтового массива с пользовательским Base 32 - PullRequest
0 голосов
/ 28 июня 2018

У меня есть 16-байтовый массив, и я собираюсь кодировать его в базовое 32-строковое представление, используя пользовательскую реализацию доступных символов

У меня может быть проблема:

16 байтов данных - это 128 битов, и чтобы проверить, сколько символов я получу от кодирования массива байтов до базы 32, я делаю:

128/5 = 25,6

Я всегда получал 26 символов из 16-байтового массива, но из приведенного выше расчета это потому, что 25,6 округляет до 26? Будет ли количество символов в кодировке всегда равным 26 или 25?

Спасибо

1 Ответ

0 голосов
/ 28 июня 2018

Дополните ввод размером блока. Размер блока кодера Base 32 равен 5 битам, но для того, чтобы он оставался выровненным по байту, вам нужно обработать число, кратное 8, а наименьшее общее кратное равно 40.

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

Если вы посмотрите на стандарт Base-64, вы увидите, что, обрабатывая входные данные в блоках по 3, кодировщик может оставаться выровненным по байту и решает проблему заполнения, используя управляющие символы "=", которые сигнализируют дополнение к декодеру.

Таким образом, с 128 битами вы обнаружите, что после кодирования 3 блоков у вас осталось 8 битов, и вам потребуется вставить 32 бита заполнения для завершения последнего 40-битного блока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...