android - 使用 SQLCipher 加密后无法压缩 Android SQLite 数据库

标签 android sqlite encryption filesize sqlcipher-android

我随我的应用程序提供了一个只读数据库,将其包含在 Assets/Database 目录中。所有数据均已预先填充。

SQLCipher集成并加密数据库后,我注意到APK大小从25MB增加到150MB。原因是 SQLite 数据库文件不再被压缩。

Android Studio 通常会压缩资源,但在数据库文件加密后,压缩文件似乎没有效果。我尝试使用常规 Zip 和 7Zip 在外部进行测试,结果没有什么区别,压缩文件的大小与原始文件的大小相同。

未加密的数据库约为 130MB,压缩后仅需要 18MB,因为其中大部分是文本,字符串压缩得很好。压缩加密的数据库文件在大小上没有差异。

通过服务器填充不是一个可行的选择,因为由于记录数量的原因,它会花费很长时间。下一个选择是从服务器下载完全加密的数据库文件,但对于 140MB 的文件来说,速度仍然太慢。

需要找到一种方法来随应用程序传送加密数据库,同时仍将应用程序大小保持在合理的20-30MB

有什么想法吗?

谢谢。

最佳答案

压缩需要找到数据中的模式。 加密消除了所有此类模式。

加密前需要先进行压缩。 这对于 SQLCipher 来说是不可能的;您必须发送压缩和加密的 .sql 文件,然后在新的加密数据库上执行它。

关于android - 使用 SQLCipher 加密后无法压缩 Android SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34757644/

相关文章:

java - 存档 opentok 音频/视频聊天时遇到问题

android - 如何在线性布局中对齐图像垂直中心

ios - 何时使用 SQLite.swift 将记录提交到磁盘?

javascript - CryptoJS 和 openssl_decrypt 不会产生相同的结果

flutter - Android 上的 Diffie Hellman 和 AES

使用 createUserWithEmailAndPassword 进行 Android Firebase 身份验证

android - 我可以在 2.1 上编译 Android 应用程序并支持 1.5 及以上的所有版本吗?

java - 将 SQLite 数据库中的字符串转换为日期/时间或 Android 中的 double 图表引擎图

python-3.x - 如何在python中将变量插入到sqlite数据库中?

java - 什么是更便宜的哈希算法?