2016-03-14 3 views
0

После шифрования видеофайла размер зашифрованного файла меньше исходного файла (обычно половина исходного размера файла). Так что я не могу его расшифровать. Мой код для шифрования ..Android-шифрование: размер зашифрованного файла меньше исходного файла

public static void encryptMe(String vidName) 
{ 
    try { 
     File rawData = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "HSDownloads"); 
     File fiss = new File(rawData, vidName); 
     Log.d(TAG,"input file "+fiss.toString()); 
     FileInputStream in = new FileInputStream(fiss); 

     File encreptedFileDirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "HSEncript"); 

     if(encreptedFileDirectory.exists()) 
     { 

     } 
     else 
     { 
      encreptedFileDirectory.mkdirs(); 
     } 
     File outfile = new File(encreptedFileDirectory,vidName); 
     OutputStream out= new FileOutputStream(outfile); 

     byte[] skey = AppUtiles.generateKey("qwertyuiopasdfgh"); 
     SecretKeySpec key = new SecretKeySpec(skey, "AES"); 


     Cipher c = Cipher.getInstance("AES"); 
     c.init(Cipher.ENCRYPT_MODE, key); 

     out = new CipherOutputStream(out, c); 
     int count = 0; 
     byte[] buffer = new byte[128*1024]; 
     while ((count = in.read(buffer)) >= 0) 
     { 
      out.write(buffer, 0, count); 
      Log.d(TAG,"inside while loop encryptMe()"+(count = in.read(buffer))); 
     } 
     out.close(); 
    } 
    catch(Exception e) 
    { 
     Log.d(TAG,"exception encryption >"+Log.getStackTraceString(e)); 
    } 
    finally 
    { 
     Log.d(TAG,"Inside finally "); 
    } 
} 

Для дешифрования и потокового видео, я использую libmedia баночку.

public void playENCVideo(String path) { 
    try { 
     Cipher decipher = null; 

     KeyGenerator kgen = KeyGenerator.getInstance("AES"); 


     byte[] key = AppUtiles.generateKey("qwertyuiopasdfgh"); 
     SecretKeySpec skey = new SecretKeySpec(key, "AES"); 

     decipher = Cipher.getInstance("AES"); 

     decipher.init(Cipher.DECRYPT_MODE, skey); 

     mServer = new LocalSingleHttpServer(); 

     mServer.setCipher(decipher); 
     mServer.start(); 

     path = mServer.getURL(path); 

     vvPlayer.setVideoPath(path); 
     vvPlayer.start(); 
    } catch (InvalidKeyException e) { 
     Log.d(TAG, "InvalidKeyException "); 
    } catch (NoSuchAlgorithmException e) { 
     Log.d(TAG, "NoSuchAlgorithmException "); 

    } catch (NoSuchPaddingException e) { 
     Log.d(TAG, "NoSuchPaddingException "); 

    } catch (IOException e) { 
     Log.d(TAG, "IOEXCEPTION "); 

    } 
    catch (Exception e) { 
      Log.d(TAG,"Genral exceptin"); 
    } 
} 

ответ

0

Данные, считываются из входного файла в вашем журнале высказыванием:

Log.d(TAG,"inside while loop encryptMe()"+(count = in.read(buffer))); 

никогда не шифруются. Только чтение данных в цикле в то время записывается в out поток

Edit: Не читаем 2:

    read 1 
        VVVV 
while ((count = in.read(buffer)) >= 0) { 
    out.write(buffer, 0, count);   
    Log.d(TAG,"inside while loop encryptMe()"+(count = in.read(buffer))); 
}               ^^^^ 
                  read 2 
+0

out.write (буфер, 0, количество); записывает данные, внутри цикла while, линия над вами выделена. – Sudarshan

+0

Вы делаете два чтения (один в цикле while и один в операторе журнала) .. но вы пишете только один из них. Вы просачиваетесь каждую секунду, читаете и, таким образом, получаете файл с половинным размером. –

+0

Thank вы, Моя проблема решена. Также я пытаюсь загрузить и воспроизвести видео в своем приложении. Для воспроизведения видео только в моем приложении шифрует его. Но код используется с огромным временем. Как я могу сократить время шифрования для вышеуказанного кода. – Sudarshan

Смежные вопросы