Каков диапазон конечного символа для 512-битной цифровой подписи в кодировке Base64?

Через различные вопросы и ответы по стеку я обнаружил, что 256-битное число в кодировке Base64 будет иметь один = для заполнения и закончится только одним из AEIMQUYcgkosw048,

Я уверен, что 512-битное число в кодировке Base64 будет иметь два == с отступом из-за коэффициента бита.

Для 564-битных чисел, закодированных в Base64, каков диапазон для последнего символа? Модуль отношения битов одинаков, значит ли это, что конечный диапазон символов одинаков как для 256-битного, так и для 512-битного кода?

Это для сохранения пространства и регулярного выражения читаемых подписей Ed25519.


Конкретно я конвертирую Java byte[64] с Strings с org.apache.commons.codec.binary.Base64 "s encodeBase64,

1 ответ

Решение

Здесь я предполагаю, что рассматриваемые 256-битные и 512-битные числа кодируются с использованием ровно 32 или 64 байтов соответственно (т. Е. Без отбрасывания начальных нулей, без дополнительного бита для предотвращения проблем со знаком / без знака, без заголовка кодирования BER ASN.1)....)

Base64 использует 4 символа для каждой байтовой тройки, каждый символ представляет 6 бит данных:

        byte #1    |    byte #2    |    byte #3
bit 7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0

становится

bit 5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0
      char #1  |  char #2  |  char #3  |  char #4

Какой символ используется, для которого указан 6-битный набор бит с помощью таблицы, см., Например, статью из Википедии.

Таким образом, в случае 256-битного числа необходимо кодировать 32 байта, то есть использовать 11 четырехзначных символов, последний из которых кодирует только 2 вместо максимум 3 байтов, то есть только 16 бит данных. Последний символ (для которого нет данных), следовательно, является = и от второго до последнего символа (для которого есть только данные для старших 4 битов) может быть только один, представляющий 6 наборов битов, два младших бита равны 0, то есть символы, которые вы перечислили.

И в случае 512-битного числа необходимо кодировать 64 байта, то есть использовать 22 символьных четверки, последний из которых кодирует только 1 вместо максимум 3 байтов, то есть только 8 бит данных. Поэтому последние два символа (для которых нет данных) являются = и вторым символом (для которого есть только данные для старших 2 битов) может быть только один, представляющий 6 битов битов, четыре младших бита равны 0, то есть символы AQgw,

Как уже упоминалось выше, я сделал некоторые предположения о кодировании чисел...

Другие вопросы по тегам