在我的应用程序中,我必须使用许多视频文件。所有视频的总大小约为500 MB。因此,我必须在第一次决定当应用程序安装和运行时,我在后台下载视频,加密后将其保存到设备的SD卡上。当视频被使用时,我会解密并使用它。
我决定这是因为所有的视频文件都很重要,所以文件的安全性是非常重要的。
我非常努力地寻找如何加密视频并将其保存到SD卡.
最后,我发现我在下面放了一件事,但在这段代码中,错误发生了,权限被拒绝了。
代码:
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): javax.crypto.spec.SecretKeySpec@69
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)任何人都有解决这个错误的办法,那么请帮我.
或者,如果你有任何其他的解决方案或建议,那么你也可以帮助.我很感激.
我还想要解密视频和播放android的方法。
任何一个人都有其他
发布于 2011-08-10 07:09:24
您所看到的错误与加密无关,与文件权限有关。您的应用程序是否请求允许使用SD卡?
其次,为什么是DES?在现代硬件上,DES通常比AES慢得多,而且键太短,不适合现代使用。另外,请确保您使用的是GCM、CTR或CBC操作模式--简单的欧洲央行没有良好的安全属性。
请注意,您正在实现一种经典的DRM方案:任何能够访问设备和应用程序私有目录的人都能够找到密钥文件并解密视频,或者在传输中窃取视频。
https://stackoverflow.com/questions/7006975
复制相似问题