我遇到过一个问题。我想使用/data/data/com.package.name
在Context.getExternalFilesDirs
处存储包含媒体数据的特定文件夹。但我想隐藏用户的数据。但每个人都可以从/data/data/com.package.name
文件夹中获取此文件。即使文件被隐藏,仍然拥有root设备的人也可以访问这些数据。所以我需要一些方法来encrypt
或压缩文件夹以保护它。我该如何保护文件夹?
我可以使用Zip密码吗?这样安全吗?
我认为encrypt
所有二进制文件和decrypt
这些都不是好习惯,因为这需要花费很多时间。
答案 0 :(得分:0)
无法阻止用户访问这些文件。如果用户想要他们,他或她可以从您的应用程序中提取密码并解密zip存档。
当您的服务器上有密码时,文件无法解密,但当您的应用程序下载密码以解密数据时,用户可以嗅探该密码。 如果你想存储任何人都不应该访问的数据(例如密码),我担心你应该阅读Security Through Obscurity
基本上,当您的应用程序可以解密数据时,高级用户也可以这样做。
对于普通用户(使用非root电话),无法访问/data/data/
中存储文件的情况。但是,有了根电话,就无法阻止用户获得他们想要的东西。
答案 1 :(得分:0)
我找到了解决方案。非常好的java库http://www.lingala.net/zip4j/ 做的工作:这是一个例子
public void unzipFile(){
String path= Environment.getExternalStorageDirectory().getAbsolutePath();
String source = path+"/Download/circus.zip";
String destination = path+"/Download/";
String password = "1234567";
try {
ZipFile zipFile = new ZipFile(source);
if (zipFile.isEncrypted()) {
zipFile.setPassword(password);
}
zipFile.extractAll(destination);
} catch (ZipException e) {
e.printStackTrace();
}
}