2017-07-20 5 views
-2

私は、暗号化された形式で外部Sdカードに保存されているビデオの復号化に「AES」アルゴリズムを使用しています。問題の[MCVE]を含めるようにあなたの質問を編集してくださいソリューションAndroidでのビデオ復号化の問題

public void createDecryptedFile(File decryptedFileDir, File decryptedFile, 
           File encryptedFile) { 
    try { 
     if (!decryptedFileDir.exists()) { 
      decryptedFileDir.mkdirs(); 
     } 
     Cipher decipher; 
     decryptedFile.createNewFile(); 
     deleteFile = decryptedFile; 
         FileInputStream encryptedFileInputstream = new FileInputStream(
       encryptedFile); 
     FileOutputStream decryptedFileOutputstream = new FileOutputStream(
       decryptedFile); 

     decipher = Cipher.getInstance("AES"); 
     Key key = generateKey(); 
     decipher.init(Cipher.DECRYPT_MODE, key); 

     CipherOutputStream cos = new CipherOutputStream(
       decryptedFileOutputstream, decipher); 

     byte data[] = new byte[10000 * 1024]; 

     int count; 
     try { 

      while ((count = encryptedFileInputstream.read(data)) != -1 && !stopConversion) { 
       Log.d("#########", "##########"); 

       total += count; 
       Log.e("convert count", total + ""); 

       cos.write(data, 0, count); 

       final long l = encryptedFile.length(); 

       runOnUiThread(new Runnable() { 
        public void run() { 

         // Show percentage 
         loadingpercent.setText("" + (int) (total * 100/l) + "%"); 
        } 
       }); 

       Log.d("$$$$$$$$",""+encryptedFileInputstream.read(data)); 

      } 
+0

をお願いします。また、ECBモードでAESを使用すると、上記の暗号化コードが完全に安全でないことにも注意してください。 –

+0

一般的なアドバイス:**常に完全修飾のCipher文字列を使用してください。** 'Cipher.getInstance(" AES ");'は、デフォルトのセキュリティプロバイダに応じて異なる暗号になることがあります。おそらく '' AES/ECB/PKCS5Padding ''という結果になるでしょうが、必ずしもそうである必要はありません。変更すると、異なるJVM間の互換性が失われます。参考:[Java default Crypto/AESの動作](https://stackoverflow.com/q/6258047/1816580) –

+0

** [ECBモード]を使用しないでください(https://crypto.stackexchange.com/q/14487/ 13022)**。それは決定論的であり、したがって意味的に安全ではありません。最低でも[CBC](https://crypto.stackexchange.com/q/22260/13022)や[CTR](https://crypto.stackexchange.com/a/2378/)のようなランダム化モードを使用する必要があります13022)。 [パディング・オラクル攻撃](https://crypto.stackexchange.com/q/18185/13022)のような攻撃が不可能になるように、暗号文を認証する方が良いです。これは、GCMやEAXのような認証されたモード、または[encrypt-then-MAC](https://crypto.stackexchange.com/q/202/13022)スキームで行うことができます。 –

答えて

0
Replace :- 


CipherInputStream cis = new CipherInputStream(encryptedFileInputstream, cipher); 


      int count; 
      try { 


       int b; 
       byte[] d = new byte[10000 * 2048]; 
       while ((b = cis.read(d)) != -1 && !stopConversion) { 


        total += b; 

        final long l = encryptedFile.length(); 


        decryptedFileOutputstream.write(d, 0, b); 


        runOnUiThread(new Runnable() { 
         public void run() { 
          loadingpercent.setText("" + (int) (total * 100/l) + "%"); 
         } 
        }); 


       } 
+0

ありがとうございます。 –

関連する問題