2012-06-16 95 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加密AES密钥)。 – Robert

+1

你确定你正在阅读的文件是否存在并且包含数据? –

+2

无论您拥有多少数据,RSA密码实例只会对* one *块进行加密或解密。这就是为什么一个块通常包含对称加密密钥(如AES密钥)的原因。 –

回答

2

您的文件几乎肯定不是RSA加密的。它可能在随机对称密钥下用AES加密,然后用RSA加密密钥。

你假定有人实际上使用RSA加密了整个文件。假设实现甚至可以让你这样做(我曾经见过在尝试这种情况时会抛出异常的东西),那么执行任何有用的东西都会太慢。