【发布时间】:2014-09-01 17:21:59
【问题描述】:
有什么方法可以加密我的 android 应用程序的数据库,同时减少应用程序大小的增加? 我尝试过 SQLcipher,但它使我的应用程序的大小增加了 10MB,这是巨大的。
【问题讨论】:
标签: android database encryption sqlcipher
有什么方法可以加密我的 android 应用程序的数据库,同时减少应用程序大小的增加? 我尝试过 SQLcipher,但它使我的应用程序的大小增加了 10MB,这是巨大的。
【问题讨论】:
标签: android database encryption sqlcipher
使用 SqlCipher 时,您的 APK 会增加 10MB,可以通过为您要定位的每个 Android 架构提供单独的 APK 来避免。
出于性能和跨平台支持的原因,SqlCipher 以 C 代码实现,并使用 Android NDK 构建为原生 Android .so 库。为它支持的每个 Android 架构构建了一个不同的库,在 SqlCipher 的情况下是:
要尽量减少由 SqlCipher 引起的文件大小增加,您可以构建一个单独的 APK,其中仅包含与您的用户设备匹配的架构。看看how to publish multiple APK's targeting different device configurations 上的Android 开发者网站。
在我使用这种技术进行测试期间,我的 APK 从 10MB 减少到了 4MB。
有关更多信息,本文详细介绍了how to implement SqlCipher on Android 并解释了文件大小的增加。
【讨论】:
这取决于您的实际需求,但一种简单的方法是在写入/读取数据库之前加密/解密数据本身。这对 apk 大小的影响很小,但您需要付出更多的努力。
如果需要高安全性,只需接受 10MB 并继续生活 :-)
【讨论】:
目前有两个主要数据库广泛用于 Java/Android 应用程序。在这种情况下,SqlLite 和 H2 数据库。根据SQLite vs H2 DB,我们可以看到两个数据库之间的一组差异特征。例如,这两个数据库都具有ACID 特征、事务、参照完整性和Unicode 表示。但是,只有 H2 数据库 具有加密数据、暴力保护和本地网络加密。
此加密机制使用可加密数据库文件的 AES 算法。由于 H2 数据库使用 AES 来加密数据文件,一般来说,我们可以推断它可能比 SqlLite稍慢,因为 AES 使用了 en[de]crypt 解析。因此,在使用 H2 数据库时,en[de]crypt 会在效率方面增加开销成本。
总之,当加密数据很重要时,H2 数据库可以成为小型项目的有用替代方案。此外,重要的是要注意,更多的实验(经验基准)对于对涉及展位数据库的性能问题做出结论是很重要的。请注意,small 和 lightly slow 是主观的,因为我们需要更精确的实验评估来比较两个(或其他)数据库。
使用了一些有用的参考资料:
【讨论】:
如果您使用的是gradel,请在gradle配置中包含一个abiFilter,例如
ndk {
abiFilters "armeabi", "armeabi-v7a"
}
如果这不能充分减小大小,您将需要重新考虑使用 SQLCipher 为您的应用程序提供本地数据加密。
【讨论】: