C# 如何安全存储不变的密码?



我整个早上都在看这个,我已经到了看不到树木的木头的地步,所以向社区寻求建议和清晰的想法。

我正在编写一个应用程序,它将从第三方提供的密码保护的Zip文件中读取数据。此格式不会更改(因此无法接受这样做的建议(,密码也不会更改。

由于此Zip上的密码将始终相同,因此我的问题是在哪里以及如何存储此安全密码?出于显而易见的原因,我不想将其存储为代码中的字符串。由于我需要实际密码,因此存储它的哈希不是路由(我不认为(。

我可能想太多了,有一个简单的选择,但就像我说的,我已经失去了我的头发在木头:)

编辑: 要为此问题的约束提供更多背景信息,请执行以下操作:

  • 我必须读取的数据是加密的zip形式 文件。其密码是静态的(例如,在所有密码上都保持不变 文件(

  • 许多文件可能会在一天内以非固定的间隔

    完成
  • 应用程序的用户不知道,也不允许知道 ZIP 文件的密码(键入不是一个选项(

  • 应用程序必须作为 Windows 服务运行,并在提供这些文件时自动处理这些
    文件,而无需任何用户
    干预。

  • 这些文件及其交付和格式化方式是第 3 个 派对和我无法控制更改这些参数

这些是我为该项目提供的禁忌,我需要为它提供一个解决方案。我已经知道在代码中存储为字符串是错误的。重复这个作为你的回答不是答案!

感谢社区的帮助:)

无处可去。没有办法以安全的方式存储密码并仍然使用它。是的,这都是大写字母。您可以尝试减轻损害,但最后,如果您的应用程序可以解码您用来存储密码的每个内容,那么黑客也可以。

CODE是一个糟糕的地方 - 不是为了安全,而是因为它真的是不可更改的。但除此之外 - 没办法。简单。自从计算机发明以来,人们试图隐藏东西。从来没有工作过。

我会在这里建议一件事。

您不能直接将密码存储在应用程序中。

您始终可以将其设置为出生日期+名字的前4个字符+其他信息的组合

可以加密配置文件中的部分。该工具仅适用于 web.config 文件,因此如果您有其他类型的应用程序,只需在运行命令之前将 app.config 重命名为 web.config,然后更改回 app.config。

使用计算机存储实质上限制对计算机上管理员的访问,而使用用户存储将访问权限限制为仅执行加密命令的帐户。

使用计算机存储进行加密:

要加密:

aspnet_regiis.exe -pef "sectionName" "C:PathToApplication" -prov "DataProtectionConfigurationProvider"

要解密:

aspnet_regiis.exe -pdf "sectionName" "C:PathToApplication"

使用用户存储进行加密

将此部分添加到配置文件中:

<configProtectedData>
<providers>
<add useMachineProtection="false"
keyEntropy=""
name="CustomDataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
/>      
</providers>
</configProtectedData>

要加密:

aspnet_regiis.exe -pef "sectionName" "C:PathToApplication" -prov "CustomDataProtectionConfigurationProvider"

要解密:

aspnet_regiis.exe -pef "sectionName" "C:PathToApplication" -prov "CustomDataProtectionConfigurationProvider"

用户存储注意事项

由于只有运行命令的用户才能访问/解密数据,因此应用程序需要一个专用的服务帐户,并且以该用户身份运行命令runas /profile /user:theusername cmd可用于以其他用户身份启动命令提示符

相关内容

  • 没有找到相关文章

最新更新