2012-06-16 5 views
6

У меня проблема с расшифровкой файла с использованием расшифровки открытого ключа 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 с первой попытки. Может ли кто-нибудь предложить, как я могу расшифровать зашифрованный файл?

+3

Вы уверены, что весь файл зашифрован с помощью RSA? Это очень необычно (слишком медленно). Обычно гибридное шифрование, например, с AES, используется для файла (шифруйте файл со случайным ключом AES, а затем шифруйте ключ AES с помощью RSA). – Robert

+1

вы * уверен * файл, который вы читаете, существует и содержит данные? –

+2

Экземпляр RSA Cipher будет шифровать или дешифровать * один * блок независимо от того, сколько у вас данных. Вот почему один блок обычно содержит симметричный ключ шифрования, такой как ключ AES. –

ответ

2

Ваш файл почти наверняка не зашифрован RSA. Вероятно, он зашифрован AES под случайным симметричным ключом, а затем ключ шифруется RSA.

Вы предполагаете, что кто-то действительно зашифровал весь файл, используя только RSA. Предполагая, что реализация даже позволяет это сделать (я видел те, которые бросают исключения, когда вы это пытаетесь), было бы слишком медленным способом сделать что-нибудь полезное.

Смежные вопросы