我正忙着为iPhone和iPad iOS7编写商业电子词典字典类型的应用程序。应用程序的价值实际上是我多年来工作的数据库,而不是应用程序本身。数据库非常大(在转换为类似SQLLite之前的Windows计算机上195mb)和我想知道保护数据的最佳方法是什么,以便应用程序可以读取它但其他人无法读取/访问它。似乎大多数移动开发人员都使用SQLLite,但可以使用普通的十六进制编辑器轻松读取数据。
从这个论坛和其他人那里我收集到SQLCipher是一个很好的工具。我的问题是,看到SQLCipher对数据库进行加密,然后在需要在临时文件中读取时对其进行解密,然后再对其进行加密。如果是这种情况,我有两个问题。
我是否理解SQLCipher是否正常工作,如果是这样,是否有任何其他工具/方法来加密/保护数据库,以便程序仍然可以使用SQL查询读取它而不会以任何方式轻松获取数据,或任何您可能有其他建议吗?
谢谢
答案 0 :(得分:0)
根据此页面:http://sqlcipher.net/design他们不会整体解密您的数据库,因此问题#1的答案是否定的。他们声称标准SQLite性能的开销约为5-15%。
对于#2 - SQLCipher将在页面中解密数据库,所以理论上 - 有人可以以解密的方式访问内存中的那个页面。但是,对于您使用的任何加密方法都是如此。试想一下 - 即使你解密完整的数据库,你的应用程序也需要在某种程度上显示/访问它的一些数据。此时必须解密数据。这里唯一的问题是 - 在给定时刻将解密多少数据。
另一种选择是尝试使用标准SQLite和标准ecnryption库自己实现ecnryption / decryption。例如,您可以单独加密每一行(或甚至包含敏感数据的字段)并在需要时对其进行解密 - 但是在某些时刻,此特定行将在内存中解密并且对黑客可见。