Определите длину строки, закодированной в base64url - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь написать модульный тест, чтобы проверить, правильно ли я хеширую и кодирую строку (фактически, сертификат PEM).

Что я делаю, это:

  1. Получение сертификата (в формате PEM)
  2. Конвертировать в DER
  3. Запустить функцию хеширования для получения хэшированного значения (SHA-1 / SHA-256)
  4. Base64Url, кодирующий хэш

Значение хэша SHA-256 имеет постоянную длину (256 бит). Это может быть представлено по-разному (шестнадцатеричный / двоичный и т. Д.), Но это то же самое внизу. Я сохраняю значение в байтовом массиве Java.

У меня такой вопрос: если я пытаюсь закодировать в base64url это значение массива хешированных байтов, всегда ли длина результирующей кодированной строки будет одинаковой? Или это будет варьироваться в зависимости от значений, присутствующих в базовом хеше?

Что мне неясно, так это часть «url» кодировки «base64url»: поскольку она делает строку безопасной для URL, выполняет ли она какое-либо расширение символа (например, urlencoding заменяет один символ пробела) с% 20, что составляет три символа).

1 Ответ

1 голос
/ 25 марта 2019

Кодировка Base64Url - это просто кодировка Base64, в которой символы + и / переключаются на два разных символа, которые лучше вводить в Uri.

Поскольку SHA-256 всегда будет иметь одинаковую фиксированную длину, закодированный в base64Хэш SHA-256 также будет той же фиксированной длины.Каждая цифра base64 составляет 6 бит.Хотя вы получите несколько дополнительных символов ('='), поскольку 256/6 не является целым числом, длина строки всегда будет одинаковой.

...