【问题标题】:Windows Runtime app Encrypt sqlite database and synchronizationWindows 运行时应用加密 sqlite 数据库和同步
【发布时间】:2014-12-01 19:29:18
【问题描述】:

我正在编写一个可以在不同设备上同步 sqlite 数据库的应用程序,例如Windows 8 设备和 Windows Phone 8 设备。

现在为了同步,我正在使用 azure 移动服务后端,但目前没有加密,因此设备本地存储中的数据和 azure 上的数据存储为“开放”。

这个问题真的很蠢:

如何在不同的设备上获取相同的加解密密钥?

我可以看到以下解决方案,但它们似乎有缺点:

  1. 从密码生成? - 我认为这是个坏主意。
  2. 在服务器上生成密钥? - 但是有一种情况是用户根本不使用同步,所以他可能没有连接到互联网。

【问题讨论】:

  • 请多花点时间写这个问题,拼写检查器应该普遍可用。试着写出应该是我的东西 -> 我是。不要让我们变得比必要的更难。

标签: c# sqlite azure encryption windows-runtime


【解决方案1】:

询问用户一些密码/帐户信息,并使用从用户提交的数据生成的密钥即时加密/解密数据库文件。没有关于用户的信息可用于加密/解密不同设备上的文件。可能只有name/email from the signed Microsoft account可以用来生成加解密密钥,但是一点都不强。

【讨论】:

  • 好的,谢谢您的回答。那么如果我这样做怎么办 - 在应用程序用户第一次启动时创建一个密码,这不会是他的 Microsoft 帐户密码。然后我根据这个密码生成密钥,并用它来加密/解密文件。然后用户将他的数据库与服务器同步(通过 Microsoft 帐户进行身份验证)然后他得到另一台设备,并将数据库从服务器同步到他的新设备,并加密/解密这个数据库用户使用他的密码(这是在第一次启动时创建的应用程序)?
  • 没错。我认为没有其他方法可以保护数据。
  • 所以还有一个小问题。当我解密数据时,如何以编程方式定义该用户使用正确的密码?
  • 此任务需要其他文件/字段。您应该使用 PBKDF2 之类的东西对密码进行哈希处理并将其存储在数据库中。您甚至可以将密码哈希转换为 sting (Base64) 并将其用作数据库文件名。正确密码 - 找到文件,不正确 - 未找到。
猜你喜欢
  • 2018-09-16
  • 2016-03-14
  • 1970-01-01
  • 2016-06-02
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多