2012-11-08 4 views
3

저는 java에서 매우 간단한 RSA 암호화를 망치고 있습니다. 출력 파일은 비어있는 것 같습니다. CipherOutputStream없이 시도하면 똑같은 작동합니다. 나는 루프에서 각각의 사이클을 쓰는 것을 볼 수 없다. 어떤 단서 ... 감사합니다.rsa와 함께 사용되는 CipherOutputStream

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.security.Security; 

import javax.crypto.Cipher; 
import javax.crypto.CipherInputStream; 
import javax.crypto.CipherOutputStream; 


public class ExampleRSA { 
    private static String VIDEO_SOURCE_FILE = "C:/Users/ggoldman/Desktop/Video/inputVideo.dv"; 
    private static String EncryptedFile = "C:/Users/ggoldman/Desktop/Video/encVideo.dv"; 
    private static File decfile = new File("C:/Users/ggoldman/Desktop/Video/decVideo.dv"); 
    private static File incfile = new File(EncryptedFile); 
    private static File sourceMedia = new File(VIDEO_SOURCE_FILE); 


    public static void main(String[] args) throws Exception { 


     KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
     Cipher cipher = Cipher.getInstance("RSA"); 

     kpg.initialize(1024); 
     KeyPair keyPair = kpg.generateKeyPair(); 
     PrivateKey privKey = keyPair.getPrivate(); 
     PublicKey pubKey = keyPair.getPublic(); 

     // Encrypt 

     cipher.init(Cipher.ENCRYPT_MODE, pubKey); 


     FileInputStream fis = new FileInputStream(sourceMedia); 
     FileOutputStream fos = new FileOutputStream(incfile); 
     CipherOutputStream cos = new CipherOutputStream(fos, cipher); 

     byte[] block = new byte[32]; 
     int i; 
     while ((i = fis.read(block)) != -1) { 
      cos.write(block, 0, i); 
     } 
     cos.close(); 
} 
+2

나를 위해 txt 파일을 사용하십시오. 경로 및 파일 사용 권한을 확인하십시오 – Yahor10

+0

@ Yahor10, 제 컴퓨터에서 재현 된 동작. 어떻게 든 입력에 의존하는 것 같습니다. –

+0

이 질문이 발견되었습니다. http://stackoverflow.com/questions/2221730/my-cipheroutputstream-fails-silently –

답변

2

RSA만으로는 전체 파일을 암호화하거나 해독 할 수 없습니다 (최소한 작은 문자열이 아닌 경우는 제외). RSA 알고리즘은 단일 블록 만 암호화 할 수 있으며 전체 파일을 처리하는 데 다소 느립니다.

3DES 또는 AES를 사용하여 파일을 암호화 한 다음 의도 한 수신자의 RSA 공개 키를 사용하여 AES 키 을 암호화 할 수 있습니다.

관련 문제