У меня проблема с расшифровкой файла с использованием расшифровки открытого ключа RSA. Мой процесс - получить файл xml, зашифровать содержимое и записать его обратно в тот же файл. Другая функция расшифровывает содержимое. Мой исходный код:Расшифровать содержимое зашифрованного файла?
public void decryptFile(String fileName,PrivateKey privateKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
FileInputStream fis = new FileInputStream(fileName);
File file=new File("decryptedfile.xml");
if(file.exists()) {
file.delete();
}
FileOutputStream fos = new FileOutputStream("decryptedfile.xml");
CipherInputStream cis = new CipherInputStream(fis, cipher);
int i;
byte[] block = new byte[32];
//System.out.println("Read : "+cis.read(block));
while ((i = cis.read(block)) != -1) {
System.out.println(String.valueOf(i));
fos.write(block, 0, i);
}
fos.close();
}
Я просто передать имя зашифрованного файла, и соответствующий секретный ключ значение, в функцию. Однако cis.read(block)
возвращает -1 с первой попытки. Может ли кто-нибудь предложить, как я могу расшифровать зашифрованный файл?
Вы уверены, что весь файл зашифрован с помощью RSA? Это очень необычно (слишком медленно). Обычно гибридное шифрование, например, с AES, используется для файла (шифруйте файл со случайным ключом AES, а затем шифруйте ключ AES с помощью RSA). – Robert
вы * уверен * файл, который вы читаете, существует и содержит данные? –
Экземпляр RSA Cipher будет шифровать или дешифровать * один * блок независимо от того, сколько у вас данных. Вот почему один блок обычно содержит симметричный ключ шифрования, такой как ключ AES. –