0

내 앱에서 파일을 암호화 및 암호 해독 중이지만 파일 크기가 너무 크면 몇 분이면 속도를 향상시킬 수 있습니까? 이것은 암호화/암호 해독 코드입니다.대용량 파일의 암호화/복호화 성능 향상 방법

private static void startCrypting(int cipherMode, String key, File inputFile, 
          File outputFile) throws MediaCodec.CryptoException { 
    try { 
     Key secretKey = new SecretKeySpec(key.getBytes(), "AES"); 
     Cipher cipher = Cipher.getInstance("AES"); 
     cipher.init(cipherMode, secretKey); 

     FileInputStream inputStream = new FileInputStream(inputFile); 
     FileOutputStream outputStream = new FileOutputStream(outputFile); 

     CipherOutputStream out = new CipherOutputStream(outputStream, cipher); 
     byte[] buffer = new byte[8192]; 
     int count; 
     while ((count = inputStream.read(buffer)) > 0) { 
      out.write(buffer, 0, count); 
     } 

     out.flush(); 
     out.close(); 
     outputStream.close(); 
     inputStream.close(); 

    } catch (NoSuchPaddingException | NoSuchAlgorithmException | InvalidKeyException | IOException ex) { 
     ex.printStackTrace(); 
    } 
} 
+0

나는 당신이 훨씬 더 잘할 수 있다고 생각하지 않습니다. 파일이 분만 소요되면 실제로 커야합니다. – Henry

+0

보안이 여기에별로 신경 쓰지 않는다면 DES 알고리즘 대칭 키를 사용할 수 있습니다. AES에 비해 약하지만 성능은 향상됩니다. – vijayinani

+2

일반적인 조언 : ** 항상 정규화 된 Cipher 문자열을 사용하십시오. **'Cipher.getInstance ("AES");'는 기본 보안 공급자에 따라 다른 암호가 발생할 수 있습니다. ''AES/ECB/PKCS5Padding ''이 될 확률이 높지만 그럴 필요는 없습니다. 변경되면 다른 JVM 간의 호환성이 손실됩니다. 참고 : [Java 기본 Crypto/AES 동작] (http://stackoverflow.com/q/6258047/1816580) –

답변

1

Simple입니다. 적절한 경우 암호화 할 때 과 CipherInputStream 사이에 BufferedInputStream을 추가하거나 CipherOutputStreamFileOutputStream 사이의 BufferedOutputStream을 추가하십시오. 이렇게하면 암호 스트림이 수행 할 수있는 모든 작업 대신 파일에서 /로 I/O를 한 번에 8192 바이트로 정규화합니다.

버퍼링 된 스트림의 버퍼 크기는별로 중요하지 않습니다. 기본적으로 8192이며이를 높이는 데 아무런 해가 없습니다.

자신의 버퍼 크기를 늘릴 수도 있습니다.