2011-08-10 4 views
2

내 응용 프로그램에서는 많은 비디오 파일을 사용해야합니다. 모든 비디오의 대략적인 크기는 500MB입니다. 따라서 애플리케이션을 설치하고 실행할 때 처음에는 백그라운드에서 비디오를 다운로드 한 다음 해당 비디오를 암호화하여 장치의 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); 
     } 
} 

로그 캣 : u는 어떤이있는 경우

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) 

모든 몸이 오류에 대한 해결책을 가지고, 다음 ...

을 도와이나하시기 바랍니다 다른 해결책이나 제안을 도울 수 있습니다 ... 그 덕분에 ....

인코딩 비디오를 해독하고 해당 안드로이드를 재생하는 방법도 필요합니다.

모든 신체

당신이보고있는 다른

답변

1

오류가 파일 권한과는 암호화와는 아무 및 모든이 없습니다 있습니다. 앱에서 SD 카드 사용 권한을 요청합니까?

둘째, 왜 DES입니까? DES는 대개 현대 하드웨어의 AES보다 상당히 느리고 현대적인 용도로는 너무 짧은 키가 있습니다. 또한 GCM, CTR 또는 CBC 작동 모드를 사용하고 있는지 확인하십시오. 간단한 ECB에는 좋은 보안 속성이 없습니다.

클래식 DRM 체계를 구현하고 있음을 인식하십시오. 장치 및 응용 프로그램 개인 디렉토리에 액세스 할 수있는 사람은 누구나 비밀 키 파일을 찾고 비디오를 해독하거나 전송중인 비디오를 훔칠 수 있습니다.

+0

예, AndroidManifest 파일에서 sd 카드 사용 권한을 추가합니다. –

+0

나는 암호화 및 해독에 대한 아이디어가 없다 ... 내 문제에 대해 더 적합한 방법으로 제안 해 주시겠습니까 ?? –

+0

@Mohit - 암호화 정보를 crypto.stackexchange.com 또는 security.stackexchange.com에서 확인하려는 경우 –

관련 문제