2012-06-16 80 views
6

Tôi đang gặp sự cố khi giải mã tệp bằng cách sử dụng giải mã khóa công khai RSA. Quá trình của tôi là nhận tệp xml, mã hóa nội dung và ghi lại tệp đó vào cùng một tệp. Một hàm khác giải mã nội dung. mã nguồn của tôi là:Giải mã nội dung tệp được mã hóa?

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

Tôi chỉ vượt qua trong tên của tập tin được mã hóa, và tương ứng với giá trị khóa bí mật, vào hàm. Tuy nhiên, cis.read(block) trả về -1 trong lần thử đầu tiên. Bất cứ ai có thể đề nghị làm thế nào tôi có thể giải mã các tập tin được mã hóa?

+3

Bạn có chắc là toàn bộ tệp được mã hóa bằng RSA không? Điều đó rất không phổ biến (quá chậm). Thông thường mã hóa lai ví dụ với AES được sử dụng cho tập tin (mã hóa tập tin với khóa AES ngẫu nhiên và sau đó mã hóa khóa AES với RSA). – Robert

+1

là bạn * chắc chắn * tệp bạn đang đọc tồn tại và chứa dữ liệu? –

+2

Ví dụ mã hóa RSA sẽ chỉ mã hóa hoặc giải mã * một khối * bất kể bạn có bao nhiêu dữ liệu. Đó là lý do tại sao một khối thường chứa một khóa mã hóa đối xứng như khóa AES. –

Trả lời

2

Tệp của bạn gần như chắc chắn không được mã hóa RSA. Nó có thể được mã hóa với AES dưới một khóa đối xứng ngẫu nhiên và khóa được mã hóa bằng RSA.

Bạn đang giả sử một người nào đó thực sự đã mã hóa toàn bộ tệp chỉ bằng RSA. Giả sử việc thực hiện thậm chí cho phép bạn làm điều này (tôi đã nhìn thấy những cái mà ném ngoại lệ khi một người cố gắng này), nó sẽ là cách cách quá chậm để làm bất cứ điều gì hữu ích.

Các vấn đề liên quan