【问题标题】:Verify sqlite database before import into android app在导入到 android 应用程序之前验证 sqlite 数据库
【发布时间】:2012-04-03 01:19:54
【问题描述】:

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

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

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

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

任何帮助将不胜感激...

【问题讨论】:

    标签: android sqlite import export scramble


    【解决方案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();
    

    【讨论】:

    • 谢谢..我考虑过这种方法...但是想在我开始之前检查是否有更好的方法..
    • 你也可以给InputStreamOutputStream写一些扩展来做一些加密/加扰。或者将所有这些包装在例如docs.oracle.com/javase/1.4.2/docs/guide/security/jce/…
    • 谢谢...所以我最终决定使用 cipherinputstream 进行 DES 加密,而不是添加标头来验证完整性,我正在检查我的所有表名是否都存在于正在导入的文件中.我看到 sqlite DB 文件有明文形式的 ddl 语句。
    【解决方案2】:

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

    【讨论】:

    • 谢谢。我认为 MD5 会根据文件中的数据而有所不同。如何预先计算它以与正在导入的文件生成的 MD5 进行比较....
    • 只需先计算您的 MD5 (softpedia.com/get/Security/Encrypting/TS-MD5-Generator.shtml) 并将结果保存在您的代码中以进行比较。稍后当数据库保存/复制到 SD 卡上时,重新生成其 MD5 并将其与代码中的进行比较。请参阅我的答案中的链接以编程方式生成 MD5
    • 我想你误解了我的要求。我将要导出/导入的数据库是可变的。它可以根据用户的使用方式从安装更改为安装。所以我永远无法在代码中保存一个常量 MD5 并将其用于比较目的。
    • 您的数据库来自哪里?是否有每个定义的数据库类型和内容?
    • 数据库是在应用程序中创建的。它将有预定义的空表,将由用户填写
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2019-04-05
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      相关资源
      最近更新 更多