【问题标题】:How do I securely encrypt information stored on the user's hard drive?如何安全地加密存储在用户硬盘上的信息?
【发布时间】:2011-09-30 01:58:08
【问题描述】:

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

【问题讨论】:

    标签: .net security encryption


    【解决方案1】:

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

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

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

    【讨论】:

    • DPAPI 是我在 Windows 上使用的。
    【解决方案2】:

    我能想到的只有两个选择

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2014-10-18
      • 2015-07-04
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      相关资源
      最近更新 更多