Определите длину строки, закодированной в base64url
Я пытаюсь написать модульный тест, чтобы проверить, правильно ли я хеширую и кодирую строку (на самом деле, сертификат PEM).
Что я делаю, это:
- Получение сертификата (в формате PEM)
- Конвертировать в DER
- Запустите функцию хеширования, чтобы получить хеш-значение (SHA-1 / SHA-256)
- Base64Url, кодирующий хеш
Значение хэша SHA-256 имеет постоянную длину (256 бит). Это может быть представлено по-разному (шестнадцатеричный / двоичный и т. Д.), Но это то же самое внизу. Я храню значение в байтовом массиве Java.
Мой вопрос заключается в следующем: если я пытаюсь кодировать base64url это значение массива хешированных байтов, всегда ли длина результирующей закодированной строки всегда одинакова? Или это будет варьироваться в зависимости от значений, присутствующих в базовом хеше?
Что мне неясно, так это часть "url" в кодировке "base64url": поскольку она делает строку безопасной для URL, выполняет ли она какое-либо расширение символов (например, urlencoding заменяет один символ пробела на%20 который состоит из трех символов).
1 ответ
Кодировка Base64Url - это просто кодировка Base64, в которой символы + и / переключаются на два разных символа, которые лучше вводить в Uri.
Поскольку SHA-256 всегда будет иметь одинаковую фиксированную длину, хеш-код SHA-256 в кодировке base64 также будет иметь такую же фиксированную длину. Каждая цифра base64 составляет 6 бит. Хотя вы получите несколько дополнительных символов ('='), поскольку 256/6 не является целым числом, строка всегда будет одинаковой длины.