Определите длину строки, закодированной в base64url

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

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

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

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

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

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

1 ответ

Решение

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

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

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