2011-08-10 17 views
2

私のアプリケーションでは、多くのビデオファイルを使用する必要があります。すべてのビデオのおよその合計サイズは500 MBです。だから、初めてアプリケーションをインストールして実行するときに、私はバックグラウンドでビデオをダウンロードし、そのビデオを暗号化してデバイスのSDカードに保存した後に決定する必要があります。いつまでもビデオが使用されると、私はそのビデオを復号化して使用します。URLからビデオを暗号化し、暗号化されたビデオをデバイスのSDカードに保存する方法

すべてのビデオファイルは非常に重要なので、そのファイルのセキュリティは非常に重要ですので、私は

...私はSDカードに保存し&ビデオを暗号化する方法を見つけることは非常に多くを試してみてください

。これを決めます

最後に、私は以下に置くことを見つけたが、このコードではPERMISSION DENIEDが発生しました。

コード:

public class VideoActivity extends Activity 
{ 
    VideoView video_view; 
    MediaController m_controller; 
    MediaPlayer mplayer; 
    String[] a = {"1","2","3","4","5","6"}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     try { 
      main(a); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } 

     public void writeToFile(String filename, Object object) throws Exception 
     { 
      FileOutputStream fos = null; 
      ObjectOutputStream oos = null; 

      try 
      { 
       fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory()+"/corebird1.mp4")); 
       oos = new ObjectOutputStream(fos); 
       oos.writeObject(object); 
       oos.flush(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
      finally 
      { 
       if (oos != null) 
       { 
        oos.close(); 
       } 
       if (fos != null) 
       { 
        fos.close(); 
       } 
      } 
     } 

     public void main(String[] args) throws Exception 
     { 
      // 
      // Generating a temporary key and stire it in a file. 
      // 
      SecretKey key = KeyGenerator.getInstance("DES").generateKey(); 
      writeToFile("secretkey.dat", key); 
      Log.d("#######key", String.valueOf(key)); 

      // 
      // Preparing Cipher object for encryption. 
      // 
      Cipher cipher = Cipher.getInstance("DES"); 
      cipher.init(Cipher.ENCRYPT_MODE, key); 

      // 
      // Here we seal (encrypt) a simple string message (a string object). 
      // 
      SealedObject sealedObject = new SealedObject("THIS IS A SECRET MESSAGE!", cipher); 

      // 
      // Write the object out as a binary file. 
      // 
      writeToFile("sealed.dat", sealedObject); 
     } 
} 

がLogCat:

08-10 12:22:32.430: WARN/System.err(338): java.io.FileNotFoundException: /mnt/sdcard/corebird1.mp4 (Permission denied) 
08-10 12:22:32.430: WARN/System.err(338):  at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method) 
08-10 12:22:32.459: WARN/System.err(338):  at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152) 
08-10 12:22:32.459: WARN/System.err(338):  at java.io.FileOutputStream.<init>(FileOutputStream.java:97) 
08-10 12:22:32.459: WARN/System.err(338):  at java.io.FileOutputStream.<init>(FileOutputStream.java:69) 
08-10 12:22:32.459: WARN/System.err(338):  at com.technosoft.video.VideoActivity.writeToFile(VideoActivity.java:71) 
08-10 12:22:32.459: WARN/System.err(338):  at com.technosoft.video.VideoActivity.main(VideoActivity.java:99) 
08-10 12:22:32.459: WARN/System.err(338):  at com.technosoft.video.VideoActivity.onCreate(VideoActivity.java:54) 
08-10 12:22:32.459: WARN/System.err(338):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-10 12:22:32.459: WARN/System.err(338):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
08-10 12:22:32.459: WARN/System.err(338):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
08-10 12:22:32.470: WARN/System.err(338):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
08-10 12:22:32.470: WARN/System.err(338):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
08-10 12:22:32.470: WARN/System.err(338):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-10 12:22:32.470: WARN/System.err(338):  at android.os.Looper.loop(Looper.java:123) 
08-10 12:22:32.470: WARN/System.err(338):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-10 12:22:32.470: WARN/System.err(338):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-10 12:22:32.470: WARN/System.err(338):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-10 12:22:32.480: WARN/System.err(338):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-10 12:22:32.480: WARN/System.err(338):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-10 12:22:32.480: WARN/System.err(338):  at dalvik.system.NativeStart.main(Native Method) 
08-10 12:22:32.480: DEBUG/#######key(338): [email protected] 
08-10 12:22:32.510: WARN/System.err(338): java.io.FileNotFoundException: /mnt/sdcard/corebird1.mp4 (Permission denied) 
08-10 12:22:32.510: WARN/System.err(338):  at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method) 
08-10 12:22:32.520: WARN/System.err(338):  at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152) 
08-10 12:22:32.520: WARN/System.err(338):  at java.io.FileOutputStream.<init>(FileOutputStream.java:97) 
08-10 12:22:32.520: WARN/System.err(338):  at java.io.FileOutputStream.<init>(FileOutputStream.java:69) 
08-10 12:22:32.520: WARN/System.err(338):  at com.technosoft.video.VideoActivity.writeToFile(VideoActivity.java:71) 
08-10 12:22:32.520: WARN/System.err(338):  at com.technosoft.video.VideoActivity.main(VideoActivity.java:116) 
08-10 12:22:32.520: WARN/System.err(338):  at com.technosoft.video.VideoActivity.onCreate(VideoActivity.java:54) 
08-10 12:22:32.520: WARN/System.err(338):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-10 12:22:32.520: WARN/System.err(338):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
08-10 12:22:32.520: WARN/System.err(338):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
08-10 12:22:32.520: WARN/System.err(338):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
08-10 12:22:32.520: WARN/System.err(338):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
08-10 12:22:32.520: WARN/System.err(338):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-10 12:22:32.520: WARN/System.err(338):  at android.os.Looper.loop(Looper.java:123) 
08-10 12:22:32.520: WARN/System.err(338):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-10 12:22:32.520: WARN/System.err(338):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-10 12:22:32.520: WARN/System.err(338):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-10 12:22:32.530: WARN/System.err(338):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-10 12:22:32.530: WARN/System.err(338):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-10 12:22:32.530: WARN/System.err(338):  at dalvik.system.NativeStart.main(Native Method) 

どれ体はその後、私を助けてください、このエラーの解決策を持っている...

またはuがいずれかを持っている場合他の解決策や提案もお手伝いできます...私はそれに感謝しています....

また、エンコードビデオを復号化してそのアンドロイドを再生する方法も必要です。

どれ体は、他の

答えて

1

を持っているあなたが見ているエラーは、暗号化やファイルのパーミッションを行うためにすべてとは何の関係もありません。あなたのアプリはSDカードの使用を許可していますか?

第2に、なぜDESですか? DESは、現代のハードウェアでは通常AESよりもかなり遅く、近代的な使用にはあまりにも短いキーを持っています。また、GCM、CTR、またはCBCの操作モードを使用していることを確認してください。単純なECBには優れたセキュリティー特性がありません。

クラシックDRMスキームを実装していることを認識してください。デバイスとアプリケーションのプライベートディレクトリにアクセスできるユーザーは、秘密キーファイルを見つけてビデオを復号化するか、転送中にビデオを盗むことができます。

+0

はい、AndroidManifestファイルでsdカード用の権限を追加します。 –

+0

私は暗号化と解読についてのアイデアはありません...私の問題に適した方法で私に提案してくださいできますか? –

+0

@モート - 暗号化に関する情報が必要な場合は、crypto.stackexchange.comまたはsecurity.stackexchange.com –

関連する問題