【问题标题】:Encrypt SQLite database without increasing app size?在不增加应用程序大小的情况下加密 SQLite 数据库?
【发布时间】:2014-09-01 17:21:59
【问题描述】:

有什么方法可以加密我的 android 应用程序的数据库,同时减少应用程序大小的增加? 我尝试过 SQLcipher,但它使我的应用程序的大小增加了 10MB,这是巨大的。

【问题讨论】:

    标签: android database encryption sqlcipher


    【解决方案1】:

    使用 SqlCipher 时,您的 APK 会增加 10MB,可以通过为您要定位的每个 Android 架构提供单独的 APK 来避免。

    出于性能和跨平台支持的原因,SqlCipher 以 C 代码实现,并使用 Android NDK 构建为原生 Android .so 库。为它支持的每个 Android 架构构建了一个不同的库,在 SqlCipher 的情况下是:

    • armeabi
    • armeabi-v7a
    • x86

    要尽量减少由 SqlCipher 引起的文件大小增加,您可以构建一个单独的 APK,其中仅包含与您的用户设备匹配的架构。看看how to publish multiple APK's targeting different device configurations 上的Android 开发者网站。

    在我使用这种技术进行测试期间,我的 APK 从 10MB 减少到了 4MB。

    有关更多信息,本文详细介绍了how to implement SqlCipher on Android 并解释了文件大小的增加。

    【讨论】:

      【解决方案2】:

      这取决于您的实际需求,但一种简单的方法是在写入/读取数据库之前加密/解密数据本身。这对 apk 大小的影响很小,但您需要付出更多的努力。

      如果需要高安全性,只需接受 10MB 并继续生活 :-)

      【讨论】:

      • 使用相同的密码加密每个值会降低安全性吗?我的意思是,许多具有相同密码的数据可能是密码分析的线索?
      【解决方案3】:

      目前有两个主要数据库广泛用于 Java/Android 应用程序。在这种情况下,SqlLiteH2 数据库。根据SQLite vs H2 DB,我们可以看到两个数据库之间的一组差异特征。例如,这两个数据库都具有ACID 特征事务参照完整性Unicode 表示。但是,只有 H2 数据库 具有加密数据暴力保护本地网络加密

      此加密机制使用可加密数据库文件的 AES 算法。由于 H2 数据库使用 AES 来加密数据文件,一般来说,我们可以推断它可能比 SqlLite稍慢,因为 AES 使用了 en[de]crypt 解析。因此,在使用 H2 数据库时,en[de]crypt 会在效率方面增加开销成本。

      总之,当加密数据很重要时,H2 数据库可以成为小型项目的有用替代方案。此外,重要的是要注意,更多的实验(经验基准)对于对涉及展位数据库的性能问题做出结论是很重要的。请注意,smalllightly slow 是主观的,因为我们需要更精确的实验评估来比较两个(或其他)数据库。

      使用了一些有用的参考资料:

      【讨论】:

        【解决方案4】:

        如果您使用的是gradel,请在gradle配置中包含一个abiFilter,例如

        ndk {
            abiFilters "armeabi", "armeabi-v7a"
        }
        

        如果这不能充分减小大小,您将需要重新考虑使用 SQLCipher 为您的应用程序提供本地数据加密。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-12
          • 2014-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-06
          • 1970-01-01
          相关资源
          最近更新 更多