2012-06-16 15 views
6

Tengo un problema al descifrar un archivo utilizando el descifrado de la clave pública de RSA. Mi proceso es recibir el archivo xml, encriptar el contenido y volver a escribirlo en el mismo archivo. Otra función descifra el contenido. Mi código fuente es:¿Descifrar el contenido del archivo cifrado?

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

acabo de pasar el nombre del archivo cifrado, y el correspondiente valor de la clave privada, en la función. Sin embargo, el cis.read(block) devuelve -1 en el primer intento. ¿Alguien puede sugerir cómo puedo descifrar el archivo encriptado?

+3

¿Estás seguro de que todo el archivo está encriptado con RSA? Eso es muy poco frecuente (muy lento). Por lo general, el cifrado híbrido, por ejemplo, con AES se utiliza para archivos (cifra el archivo con la clave AES aleatoria y luego encripta la clave AES con RSA). – Robert

+1

¿está seguro * de que el archivo que está leyendo existe y contiene datos? –

+2

Una instancia de cifrado RSA solo cifrará o descifrará * un bloque * sin importar la cantidad de datos que tenga. Es por eso que ese bloque típicamente contiene una clave de cifrado simétrica, como una clave AES. –

Respuesta

2

Su archivo casi seguro no está encriptado con RSA. Probablemente esté encriptado con AES bajo una clave simétrica aleatoria y luego la clave se cifra con RSA.

Está asumiendo que alguien en realidad cifró todo el archivo con solo RSA. Asumiendo que la implementación incluso te permite hacer esto (he visto algunos que arrojan excepciones cuando uno intenta esto), sería demasiado lento para hacer algo útil.

Cuestiones relacionadas