На самом деле это не вопрос Java, а скорее вопрос криптографии.Краткое исследование EncFS показывает, что ключ тома зашифрован ключом, полученным из пароля пользователя.Вероятно, это лучший вектор атаки: атака грубой силой на слабый пароль.Однако я бы не стал слишком надеяться.
Для чего бы то ни было, классы Java JCE в javax.crypto
были бы вашим путем к выполнению симметричной криптографии в Java.В следующем фрагменте кода показано, как можно выполнить некоторую расшифровку AES с помощью открытого текста:
byte[] keyBytes = ...
byte[] volumeKeyFileContents = ...
SecretKeyFactory factory = SecretKeyFactory.getInstance("AES");
SecretKey aesKey = factory.generateSecret(new SecretKeySpec(keyBytes, "AES"));
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // for example
cipher.init(Cipher.DECRYPT_MODE, aesKey);
byte[] plaintext = cipher.doFinal(volumeKeyFileContents);
// (written from memory so may not compile without tweaks)
Затем вам потребуется использовать значение открытого текста в качестве потенциального кандидата для клавиши громкости.Ясно, что это упрощенное решение и делает много предположений;вам нужно будет более подробно изучить формат этих файлов ключей тома и алгоритмы, режимы и отступы, используемые при создании зашифрованной копии.
Удачи.