保护Xamarin应用程序中的本地专有数据

时间:2015-10-01 00:00:53

标签: sqlite xamarin

我有一个Xamarin.Forms应用程序,它使用本地SqLite数据库作为数据源。数据是专有的,所以我想保护它,这样如果有人访问数据库文件,他们就必须解密才能访问数据。

我还想限制用户可以对数据库进行的查询数量,以便在某个时刻他们必须购买使用更多数据的能力(应用程序内购买)。

我希望避免尽可能多地进行网络呼叫,以最大限度地减少对用户数据计划的影响,并允许应用在连接较差或无连接的情况下正常运行。所以,我希望数据存储在本地数据库中(可能在SqLite中)。

我很好奇不同的人如何处理这个问题以保护数据,同时最大限度地减少网络使用。

以下是我的想法(如果可能的话):

1)让用户下载/安装应用程序。

2)首次加载时,应用会根据设备ID和用户当前的购买信息上传密钥。然后它将下载使用上传密钥加密的SqLite数据库文件。

3)当用户达到查询限制时,将删除数据库文件。如果他们购买了更多数据,则会上传新密钥并下载新的加密数据库以供使用。

思考?还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

我建议SQLCipher!它是Xamarin中的一个组件(http://components.xamarin.com/view/sqlcipher-for-xamarin-ios),但也可以从源代码构建,因为它是开源的(https://www.zetetic.net/sqlcipher/open-source/

这将完全保护您的数据库:)

答案 1 :(得分:-1)

更新8/2/2018 - 由于Frank Krueger的出色表现,SQL Cipher现在免费且易于实施。 sqlite-net(https://github.com/praeclarum/sqlite-net)现在是Xamarin的defacto sqlite库(如果你还在使用Sqlite.Net分支,我建议尽快回到sqlite-net,因为Sqlite.Net已经被遗弃了)它现在完全免费提供SQL Cipher支持。

正如clb所提到的,SQLCipher是开源的。因此,如果您不想为组件付费,您可以自行下载并构建源代码,然后将其包装以便在Xamarin中使用。诚然,这是一项具有技术挑战性的任务。

如果这不是一个选项,我会推荐另外两个选项:

  1. 重新评估您在本地存储数据的需求。您极不可能需要传输足够的数据,甚至导致用户数据计划的昙花一现。在蜂窝和wifi之间,用户没有连接就不常见了。它肯定会发生,并且某些应用程序非常重要,但如果数据敏感,您可能需要做出让步。

  2. 如果您必须在本地存储数据,并且无法使用SQLCipher,那么您最后一个真正的选择是使用加密库并加密数据本身,而不是数据库文件。由于各种原因,这通常不太理想,但它可能是您的最后手段。 PCL Crypt是一个支持PCL的加密库,您可以查看。

  3. https://github.com/aarnott/pclcrypto