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?
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
Czy jesteś pewien, że plik, który czytasz, istnieje i zawiera dane? –
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. –