加密登录密码以在多个设备上使用

时间:2016-07-06 14:24:24

标签: c# encryption cryptography aes dpapi

可能是因为我过多地考虑过这个问题而且过于复杂的事情并且把自己束缚在一个结中。我不太了解加密,所以这没有帮助。

我有一个应用程序,其中包含使用AES类加密的字段(我在另一个问题中发现此处),然后加密的字符串保存在XML文件中。现在,用于加密每个字符串的密码由用户提供,并在他们第一次使用该程序时进行设置。这部分工作正常,我可以完全按照自己的意愿加密和解密数据。

我遇到的问题是用于加密这些字符串的密码存储在应用程序内的配置文件中。最初我想我会使用DPAPI来加密这个密码,然后保存在配置文件中,一切似乎都按照我想要的方式工作。用户启动了程序,设置了密码,添加了一些字符串,所有内容都经过加密和解密,并且完美无缺。

问题是这在密码创建的计算机上工作正常但是当我尝试在另一台计算机上使用它时DPAPI会抛出错误(我假设因为DPAPI是特定于机器的?)

基本上我需要一种方法来加密用户在首次启动时设置的密码并存储在配置文件中,但是我无法使用我用来加密其他数据的AES类,因为它需要密码才能加密!!!

正如我所说,我的AES类可以完美地加密其他数据,但我需要一种方法来保护存储在app.config文件中的密码,而不是用DPAPI加密它,这样我就可以在其他设备上使用它而不会出现错误

我希望我的头疼很有意义!!!!

任何帮助非常感谢

其他信息:

该应用程序是一个非常简单的winform应用程序,允许在输入正确的密码时访问数据,程序存储在USB记忆棒上,使其能够连接到任何计算机并解密和查看数据。没有用户结构,您只需要正确的密码即可访问应用程序并查看数据。用于访问应用程序的密码是用于加密数据的密码。

重复的问题:这个问题有所不同,因为在他们的案例中,DPAPI在我的案例中做了他们需要的事情,而不是像我在原来的问题中所表达的那样!

2 个答案:

答案 0 :(得分:1)

您不存储密码。您要求用户提供它。

答案 1 :(得分:-2)

如果您必须在USB设备上物理存储密码,请不要使用密码本身(或从计算机上当前用户生成密钥的DPAPI)。

在第一次设置时,要求用户输入密码,使用SAFE哈希函数(来自SHA-2系列)对其进行哈希处理并保存密码Hash(Plain password)=Cipher 稍后,当您要加密或验证时,请使用密码进行加密。这样,您可以在设备上保留密码的安全副本,而不会覆盖用户的密码,并且仍然使用特定于用户的字符串来加密数据。

请记住,如果攻击者掌握了哈希值,此方法仍然会使用户容易受到字典攻击。