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

Chr*_*ain 8 sqlite xamarin

我有一个Xamarin.Forms应用程序,它使用本地SqLite数据库作为其数据源.数据是专有的,所以我想保护它,以便如果有人访问数据库文件,他们将不得不解密它来访问数据.

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

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

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

这是我在想的(如果可能的话):

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

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

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

思考?有没有更好的办法?

Jar*_*red 0

更新 8/2/2018 - 由于 Frank Krueger 的伟大,SQL Cipher 现在是免费且易于实现的。sqlite-net ( https://github.com/praeclarum/sqlite-net ) 现在是 Xamarin 的事实上的 sqlite 库(如果您仍在使用 Sqlite.Net 分支,我建议尽快返回 sqlite-net因为 Sqlite.Net 已被放弃),现在它包含完全免费的 SQL Cipher 支持。


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

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

  1. 重新评估您在本地存储数据的需求。您极不可能需要传输足够的数据,甚至导致用户的数据计划出现问题。在蜂窝网络和 WiFi 之间,用户没有连接的情况已经不再常见。它确实会发生,并且在某些应用程序中这一点非常重要,但如果数据如此敏感,您可能必须做出让步。

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

https://github.com/aarnott/pclcrypto