Аналогично этому вопросу я m пытаюсь создать Java-реализацию собственной реализации скрипта Google здесь.
Я убедился, что могу сгенерировать то же производное значение ключа (т. е. пароль + соль, хешированная с использованием Java-реализации SCrypt), что и проект C, но мне не удалось выполнить следующий шаг (шифрование AES с использованием производного ключа в качестве ключа и base_64_signer_key, экспортированного из моего проекта Firebase в качестве данных), чтобы соответствовать известному зашифрованному тексту.
Таким образом, у меня есть две проблемы:
Я не понимаю, почему полученная длина ключа составляет 64 байта, учитывая, что AES принимает максимальную длину ключа 32 байта... Используются ли только первые 32 байта? Я не могу получить тот же результат, используя:
final byte[] keyVal = Base64.decodeBase64(derivedKey.getBytes(CHARSET));
Key key = new SecretKeySpec(keyVal, 0, 32, "AES");
Я также не уверен, какие параметры AES использовать для этого шага. Я сейчас пытаюсь:
Cipher.getInstance("AES/CTR/NoPadding");
У меня есть репозиторий текущего кода на GitHub по адресу firebase-scrypt-java.