2012-02-15 92 views
2

很多威胁谈谈如何对密码进行加密,对称的和不对称加密等等存储密码的应用程序

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

现在的问题是,我想要在应用程序中存储密码,以便用户不必每次都希望连接到sqlite数据库时键入它。

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

我可以继续重复此过程并加密第二个密码,但随后我将再次留下一个未加密的密码,我需要取消加密该密码。

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


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

让我们说:

密码才能打开数据库是:1234

那么我会用钥匙someKey加密密码,并让我们说,让abcd

,如果我再解密方法abcd用钥匙someKey我应该得到1234

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

最后,如果我将能够unencrypting xy#8得到1234密码用钥匙someKey话,我会得到abcd我会再解密方法是使用相同的密钥someKey为了得到1234


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

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

+1

http://blogs.msdn.com/b/ericlippert/archive/2011/09/27/keep-it-secret-keep-it-safe.aspx – SLaks 2012-02-15 00:45:44

+0

为什么数据库首先有一个密码? – SLaks 2012-02-15 00:46:12

+0

我希望对使用该应用程序的用户保持灵活性。我需要让他们决定数据库是否有密码,没有密码或没有密码,并让程序记住它,这样如果有人窃取了data.db文件,他们将无法打开它。 – 2012-02-15 00:48:40

回答

3

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

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

欲了解更多信息,请阅读关于DPAPI

相关问题