【问题标题】:Store password in application在应用程序中存储密码
【发布时间】:2012-03-06 09:10:38
【问题描述】:

很多威胁都在谈论如何加密密码、对称和非对称加密等......

我有一个简单的问题。如果我要求用户每次连接到 sqlite 数据库时都输入密码,那么一切正常。

现在的问题是我想将密码存储在应用程序中,这样用户就不必在每次连接到 sqlite 数据库时都输入密码。

我知道我可以加密密码并将加密的密码存储在任何地方。但这意味着我需要存储第二个密码才能在其他地方解密该密码。

我可以继续重复这个过程并加密第二个密码,但我会再次留下一个未加密的密码,我需要解密那个密码。

所以我的问题是......我应该将解密其他密码所需的最终密码存储在哪里?放置密码最安全的地方是哪里?


如果你不明白最后一部分,这里是我试图解释最后一部分的一个例子:

假设:

打开数据库的密码是:1234

然后我将使用密钥someKey 加密该密码,假设给出abcd

如果我用密钥someKey 解密abcd,我应该得到1234

我可以用密钥someKey 再次加密abcd,我可能会得到xy#8

最后,如果我能够通过使用密钥someKey 解密xy#8 来获得1234 密码,那么我将获得abcd 然后我将使用相同的密钥someKey 解密它以获得1234


所以不管我重复多少次这个过程,我总是会在应用程序的某个地方得到一些未加密的密钥someKey。我不需要存储该密钥的唯一方法是,如果我要求用户每次连接到数据库时都提供密码。

将字符串someKey 尽可能隐藏地存储在应用程序中的哪里是最安全的地方?

【问题讨论】:

  • 为什么数据库首先要有密码?
  • 我希望灵活地处理使用该应用程序的用户。我需要让他们决定数据库是否有密码、没有密码或有密码,并让程序记住它,这样如果有人窃取了 data.db 文件,他们将无法打开它。

标签: c# encryption passwords


【解决方案1】:

您应该使用ProtectedData 类加密密码。
这将使 Windows 为您存储密钥。

如果您指定按用户加密并且用户有登录密码,Windows 将使用登录密码来创建其加密密钥。

有关更多信息,请阅读DPAPI

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 2011-09-21
    • 2010-09-07
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多