2012-06-16 16 views
6

Mam problem z odszyfrowaniem pliku przy użyciu odszyfrowywania klucza publicznego RSA. Mój proces polega na otrzymaniu pliku xml, zaszyfrowaniu zawartości i zapisaniu go do tego samego pliku. Kolejna funkcja odszyfrowuje zawartość. Mój kod źródłowy to:Odszyfrować zaszyfrowaną zawartość pliku?

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(); 
} 

Po prostu przekazuję nazwę zaszyfrowanego pliku i odpowiednią wartość klucza prywatnego do funkcji. Jednak cis.read(block) zwraca -1 przy pierwszej próbie. Czy ktoś może zasugerować, w jaki sposób mogę odszyfrować zaszyfrowany plik?

+3

Czy jesteś pewien, że cały plik jest zaszyfrowany za pomocą RSA? Jest to bardzo rzadkie (zbyt wolne). Zazwyczaj stosuje się szyfrowanie hybrydowe, na przykład z AES (plik szyfrowany z losowym kluczem AES, a następnie szyfrowanie klucza AES za pomocą RSA). – Robert

+1

Czy jesteś pewien, że plik, który czytasz, istnieje i zawiera dane? –

+2

Instancja szyfrowania RSA szyfruje lub odszyfrowuje tylko jeden blok bez względu na to, ile masz danych. Z tego powodu ten blok zwykle zawiera symetryczny klucz szyfrujący, taki jak klucz AES. –

Odpowiedz

2

Twój plik prawie na pewno nie jest zaszyfrowany RSA. Prawdopodobnie jest zaszyfrowany za pomocą AES pod losowym kluczem symetrycznym, a klucz jest następnie szyfrowany za pomocą RSA.

Zakładasz, że ktoś faktycznie zaszyfrował cały plik używając tylko RSA. Zakładając, że implementacja nawet pozwala ci to zrobić (widziałem tych, którzy wyrzucają wyjątki, kiedy ktoś próbuje tego), byłoby to o wiele za wolno, by zrobić cokolwiek pożytecznego.

Powiązane problemy