В настоящее время я использую библиотеки надувного замка для реальной работы и нашел пример на sloanseaman.com, который (после небольшой настройки) работает с v1.52.
У меня также есть рабочий пример от developer.com того, как использовать интерфейс JCE, и я могу даже добавить в него bcprov и использовать некоторые из его алгоритмов.
public class CryptoUtil {
private static final String ALGORITHM = "IDEA/PGP/NoPadding";
public static void encryptFile(File keyFile, File plainTextFile, File encryptedFile) throws GeneralSecurityException, IOException {
Cipher desCipher = Cipher.getInstance(ALGORITHM);
desCipher.init(Cipher.ENCRYPT_MODE, readKeyFromFile(keyFile));
OutputStream out = new BufferedOutputStream(new FileOutputStream(encryptedFile));
InputStream in = new BufferedInputStream(new FileInputStream(plainTextFile));
while (in.available() > 0) {
// Read the next chunk of bytes...
byte[] cleartextBytes = new byte[in.available()];
in.read(cleartextBytes);
// Now, encrypt them and write them to the encrypted file...
byte[] encryptedBytes = desCipher.update(cleartextBytes);
out.write(encryptedBytes, 0, encryptedBytes.length);
}
// Take care of any pending padding operations
out.write(desCipher.doFinal());
in.close();
out.flush();
out.close();
System.out.println("Encrypted to " + encryptedFile);
}
Но независимо от того, какую строку алгоритма я использую, я не могу заставить свою утилиту JCE шифровать так, как это делает утилита bouncyCastle.
Самое далекое, что я получил, это использование «IDEA / PGP / NoPadding», которое позволяет мне шифровать и расшифровывать внутри себя, но утилита BC не будет их расшифровывать, говоря, что в потоке есть неизвестный объект.
Вот мой исходный код
Ребята, вы знаете, какую комбинацию алгоритма, режима и заполнения мне нужно использовать для этого? Есть ли другие варианты, которые мне нужно как-то применить? Я предполагаю, что мне нужно использовать версию AlgorithmParametersSpi от BC, но я еще не понял, как ее создать.