#java #algorithm #cryptography #totp
#java #алгоритм #криптография #totp
Вопрос:
Я пытаюсь реализовать алгоритм TOTTP, описанный здесь: https://www.rfc-editor.org/rfc/rfc6238
Key key = new SecretKeySpec(seed.getBytes(StandardCharsets.UTF_8), "HmacSHA512");
Однако в RFC говорится, что:
Seed for HMAC-SHA512 - 64 bytes
String seed64 = "3132333435363738393031323334353637383930"
"3132333435363738393031323334353637383930"
"3132333435363738393031323334353637383930"
"31323334";
- Это
seed64
64 байта, и что произойдет, если я не передам начальное значение в 64 байта, как я делаю при генерации ключа (мое начальное значение имеет произвольную длину)? - Должен ли я использовать кодировку Base64 для моего начального числа?
Комментарии:
1. Из RFC ясно, что эти примеры «начальных значений» имеют шестнадцатеричную кодировку и поэтому должны быть шестнадцатерично декодированы до
byte[]
первого. Однако вы можете добиться того же результата, сохранив вместо этого строку ASCII, представленную шестнадцатеричными данными, а затем используя.getBytes()
метод, который у вас есть. Строка ASCII — это «12345678901234567890123456789012345678901234567890123456789012345678901234434».2. Итак, есть ли проблема в использовании начального значения, которое меньше 64 байт?