在导入到Android应用程序之前验证sqlite数据库

时间:2012-03-18 01:12:37

标签: android sqlite import export scramble

我有一个应用程序,其中我添加了导出/导入数据库功能...我想做两件事:

1)导出时:加扰导出的数据库,以便普通人(我知道有些人可以解码最好的伪装技术)无法读取内容......

2)导入时:验证正在导入的文件,以确保它适用于我的应用程序,而不是其他任何内容。

我在这里看到一些关于加密的链接,可以解决第一点。但我不想加密。我想做一些简单的加扰。我已经看到一些关于通过检查我的应用程序查找的表来验证表内容的帖子。这是一个很好的解决方案,但我需要首先加载文件以验证并在有错误时回滚。

非常感谢任何帮助......

3 个答案:

答案 0 :(得分:1)

非常简单的方法:在文件中添加一些标题,稍后您可以读回来并检查:

// w/o exception handling finally etc
String secret = "zomg,secret";
byte[] header = secret.getBytes();
byte[] buffer = new byte[4096];
FileInputStream in = new FileInputStream("/your/sqlite.db");
FileOutputStream out = new FileOutputStream("/sdcard/the.secretfile");
out.write(header);
int read = 0;
while ((read = in.read(buffer)) != -1) {
    out.write(buffer, 0, read);
}
out.close();
in.close();

答案 1 :(得分:0)

处理此问题的最佳和最简单的方法是生成数据库文件的校验和(MD5)并与每个计算的文件进行比较。 For more info

答案 2 :(得分:0)

所以我最终决定使用cipherinputstream进行DES加密,而不是添加标头来验证完整性,我正在检查是否所有的表名都出现在正在导入的文件中。我看到sqlite DB文件有明文的ddl语句。这可能不是最优雅/完整的解决方案,但它有效。