Я использую Java-код для JWT, но получаю небольшие различия по сравнению с онлайн-инструментами. Почему? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть часть кода Java:

 public static String generate(String key, String data) throws NoSuchAlgorithmException, InvalidKeyException {
            if (key == null || data == null) {
                throw new NullPointerException();
            }
            final Mac hMacSHA256 = Mac.getInstance(HMAC_SHA256);
            byte[] hmacKeyBytes = key.getBytes(StandardCharsets.UTF_8);
            final SecretKeySpec secretKey = new SecretKeySpec(hmacKeyBytes, HMAC_SHA256);
            hMacSHA256.init(secretKey);
            byte[] dataBytes = data.getBytes(StandardCharsets.UTF_8);
            byte[] res = hMacSHA256.doFinal(dataBytes);

            return Base64.getEncoder().encodeToString(res);

        }

И, используя кодировку Base64, я получаю следующую подпись: OpDZIL3l / RRZoeDgMBmlaRGPAthcbyiZJt5wqWFPSK4 =

Если я проверяю онлайн-инструмент, подпись тампоказывает: OpDZIL3l_RRZoeDgMBmlaRGPAthcbyiZJt5wqWFPSK4 =

Только "_" заменяется на "/".Может кто-нибудь помочь мне с этим, поскольку я новичок в JWT?

Заранее спасибо

1 Ответ

0 голосов
/ 01 февраля 2019

Только "_" заменяется на "/".Может кто-нибудь помочь мне с этим, поскольку я новичок в JWT?

Это не имеет ничего общего с JWT - две системы просто используют разные варианты кодировки Base64.

Дело в том, что есть несколько вариантов Base64. Статья в Википедии имеет хороший обзор.

В частности, существует так называемая "URL-безопасная" кодировка или base64url стандартизировано в RFC 4648 .Единственное отличие от обычного Base64 состоит в том, что он использует символы - и _ вместо + и /.Вот что вы видите.


Преимущество безопасной URL-кодировки, как следует из названия, заключается в том, что кодированные строки могут быть включены в URL-адреса в качестве параметров запроса без дополнительной кодировки (т. Е. Процентное кодирование URL-адреса).).Символы + и /, используемые стандартным Base64, имеют специальное значение в URL-адресах, поэтому их необходимо кодировать, чтобы их заменяли - и _.

Кодирование, безопасное для URL-адреса.часто используется для JWT, потому что они часто передаются как параметры URL.

...