0

Je crypte et décrypte les fichiers dans mon application, mais si le fichier est trop volumineux, cela prend quelques minutes, est-il possible d'améliorer la vitesse? ceci est le code de cryptage/décryptageComment améliorer la préformance du cryptage/décryptage pour les gros fichiers

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

Je ne pense pas que vous pouvez faire beaucoup mieux. Le fichier doit être vraiment grand si cela prend quelques minutes. – Henry

+0

Si la sécurité n'est pas un sujet de préoccupation ici, vous pouvez utiliser la clé symétrique de l'algorithme DES. Il est faible par rapport à AES, mais permettra d'améliorer les performances. – vijayinani

+2

Conseil général: ** Toujours utiliser une chaîne de chiffrement entièrement qualifiée. ** 'Cipher.getInstance (" AES ");' peut entraîner des chiffrements différents en fonction du fournisseur de sécurité par défaut. Il en résulte très probablement '' "AES/ECB/PKCS5Padding" ', mais ce n'est pas obligatoire. Si cela change, vous perdrez la compatibilité entre les différentes JVM. Pour référence: [comportement Crypto/AES Java par défaut] (http://stackoverflow.com/q/6258047/1816580) –

Répondre

1

Simple. Ajouter un BufferedInputStream entre le FileInputStream et le décryptage CipherInputStream, ou un BufferedOutputStream entre le CipherOutputStream et le FileOutputStream lors du cryptage, selon le cas. Cela régularisera les E/S vers/du fichier à 8192 octets à la fois, au lieu de ce que les flux chiffrés peuvent faire.

La taille de la mémoire tampon des flux tamponnés n'a même pas beaucoup d'importance: elle est 8192 par défaut et il n'y a pas de mal à l'augmenter.

Vous pouvez également augmenter la taille de votre propre tampon.