在应用程序中存储密码

时间:2012-02-15 00:43:53

标签: c# encryption passwords

许多威胁谈论如何加密密码,对称和非对称加密等......

我有一个简单的探测器。如果我要求用户每次希望连接到sqlite数据库时都输入密码,那么一切都还可以。

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

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

我可以继续重复此过程并加密第二个密码,但之后我将再次使用未加密的密码,我需要解密该密码。

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


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

让我们说:

打开数据库的密码是:1234

然后我会使用密钥someKey加密该密码,让我们假设abcd

如果我使用密钥abcd取消加密someKey我应该1234

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

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


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

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

1 个答案:

答案 0 :(得分:3)

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

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

有关详情,请参阅DPAPI