Ускорение шифрования? - PullRequest
       8

Ускорение шифрования?

3 голосов
/ 29 февраля 2012

У меня есть этот код для шифрования видеофайлов.

public static void encryptVideos(File fil,File outfile)
{ 
  try{
    FileInputStream fis = new FileInputStream(fil);
    //File outfile = new File(fil2);
    int read;
    if(!outfile.exists())
      outfile.createNewFile();
    FileOutputStream fos = new FileOutputStream(outfile);
    FileInputStream encfis = new FileInputStream(outfile);
    Cipher encipher = Cipher.getInstance("AES");
    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    //byte key[] = {0x00,0x32,0x22,0x11,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
    SecretKey skey = kgen.generateKey();
    //Lgo
    encipher.init(Cipher.ENCRYPT_MODE, skey);
    CipherInputStream cis = new CipherInputStream(fis, encipher);
    while((read = cis.read())!=-1)
      {
        fos.write(read);
        fos.flush();
      }   
    fos.close();
  }catch (Exception e) {
    // TODO: handle exception
  }
}

но файлы, которые я использую, очень большие, и при использовании этого метода это занимает слишком много времени. Как я могу ускорить это?

Ответы [ 3 ]

5 голосов
/ 29 февраля 2012

Ну, это выглядит очень медленно, чтобы начать с:

while((read = cis.read())!=-1)
{
    fos.write(read);
    fos.flush();
}

Вы читаете и записываете один байт за раз и очищаете поток . Сделайте это буфер одновременно:

byte[] buffer = new byte[8192]; // Or whatever
int bytesRead;
while ((bytesRead = cis.read(buffer)) != -1)
{
    fos.write(buffer, 0, bytesRead);
}
fos.flush(); // Not strictly necessary, but can avoid close() masking issues

Также обратите внимание, что вы только закрываете fos (не cis или fis), и вы должны закрывать их все в finally блоках.

2 голосов
/ 29 февраля 2012

Вы можете использовать Android NDK, чтобы написать эту часть своего приложения на C ++, чтобы получить значительный прирост производительности. Это похоже на ситуацию, которая выиграет от этого. И уже может быть что-то подобное сделано с NDK.

0 голосов
/ 12 июля 2015

вы должны попробовать Facebook Conceal. Это невероятно быстро!

https://github.com/facebook/conceal

...