【问题标题】:Protecting local proprietary data in an Xamarin app保护 Xamarin 应用程序中的本地专有数据
【发布时间】:2015-10-01 00:00:53
【问题描述】:

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

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

我想尽可能避免拨打网络电话,以尽量减少对用户数据计划的影响,并让应用在连接不佳或没有连接的情况下正常运行。所以,我希望将数据存储在本地数据库中(可能在 SqlLite 中)。

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

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

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

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

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

想法?有没有更好的办法?

【问题讨论】:

  • 好问题,让我们看看其他人会怎么说,如果数据库存储在本地限制查询或删除数据库并没有多大帮助,我认为用户可以找到一种无需访问数据库的方法打开应用但解密整个数据库就足够了

标签: sqlite xamarin


【解决方案1】:

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

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

【讨论】:

  • Xamarin 组件不错,但每个平台 499 美元,这是一个高昂的价格。 Android、ios 和 Windows 手机是否有免费或更便宜的选择?
【解决方案2】:

2018 年 8 月 2 日更新 - 由于 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

【讨论】:

  • 我不知道它是否自 2015 年以来就已关闭源代码,但从他们的网站上可以看到:“Xamarin 的 SQLCipher 只能通过我们的商业版许可通过下面的链接或通过 SQLCipher Enterprise 程序获得。 "
  • SQLCipher 本身是开源的(参见此处:github.com/sqlcipher/sqlcipher)。 Xamarin 的 SQLCipher 显然不是,我在回答中明确指出,为了将它用于 Xamarin,您必须为组件付费或自己为 Xamarin 包装开源库。但是,由于 Xamarin 上的这个答案 SQL Cipher 变得更容易访问,我将相应地更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 2010-11-27
  • 2017-11-05
  • 1970-01-01
  • 2021-12-03
  • 2010-11-15
  • 1970-01-01
相关资源
最近更新 更多