Реализация Firebase SCrypt на Java

Аналогично этому вопросу я m пытаюсь создать Java-реализацию собственной реализации скрипта Google здесь.

Я убедился, что могу сгенерировать то же производное значение ключа (т. е. пароль + соль, хешированная с использованием Java-реализации SCrypt), что и проект C, но мне не удалось выполнить следующий шаг (шифрование AES с использованием производного ключа в качестве ключа и base_64_signer_key, экспортированного из моего проекта Firebase в качестве данных), чтобы соответствовать известному зашифрованному тексту.

Таким образом, у меня есть две проблемы:

  1. Я не понимаю, почему полученная длина ключа составляет 64 байта, учитывая, что AES принимает максимальную длину ключа 32 байта... Используются ли только первые 32 байта? Я не могу получить тот же результат, используя:

    final byte[] keyVal = Base64.decodeBase64(derivedKey.getBytes(CHARSET));

    Key key = new SecretKeySpec(keyVal, 0, 32, "AES");

  2. Я также не уверен, какие параметры AES использовать для этого шага. Я сейчас пытаюсь:

    Cipher.getInstance("AES/CTR/NoPadding");

У меня есть репозиторий текущего кода на GitHub по адресу firebase-scrypt-java.


person Yann    schedule 07.09.2020    source источник