如何安全加密存储在用户硬盘上的信息?

时间:2011-07-07 00:34:55

标签: .net security encryption

我正在编写.Net WinForms应用程序,我需要保存密码才能访问远程服务。我有一个XML文件,我写了所有设置。但是,我不想将纯文本密码写入XML配置文件。我想过使用AesCryptoServiceProvider来加密信息。这个类需要一个密钥来加密数据,我想我可以把它留在我的程序的源代码中。然而,在我看来,这只比将其存储在纯文本中要好一些,因为对于我的程序的所有实例,密钥总是相同的。我可以在第一次启动程序时生成一个密钥,但是,那么,哪里可以存储它的好地方?有人认为我使用的是常量密钥,以及与密码一起存储的盐。这将为每个人机器制作一个独特的“钥匙”,而不必将钥匙存放在空旷的地方。是否有标准的方法将这类信息存储在用户的硬盘上?

2 个答案:

答案 0 :(得分:2)

我想不出一个完美的解决方案,但你可以使用DPAPI ......

这通常会阻止另一个系统上的文件解密,但不会最终保护数据,因为用户可以从您的程序中提取额外的关键字节,并且因为他可以访问不会的机器/用户密钥是一个问题......

如果你的问题更像是“在哪里存储一个无法避免的最终加密密钥?” ...我建议具有严格访问权限的每个用户的注册表路径

答案 1 :(得分:0)

我只能想到两个选项

  • 让用户使用主密码 - 这意味着用户完全负责加密数据。这可能会使他们烦恼,所以请考虑与用户帐户集成。
  • 依赖系统特定信息 - 我不是.NET开发人员所以我不确定您可以获得多少系统唯一信息,但您可以提供任何帮助。这实际上只会保护外部用户免于解密密码;任何有权访问该系统的人理论上都可以获得它。

请记住,如果您担心人们进入您的应用程序以提取密钥之类的东西,那么他们就可以轻松打印您发送之前需要发送的原始密码。如果你担心那么你需要考虑其他选择