我整个早上都在看这个,我已经到了看不到树木的木头的地步,所以向社区寻求建议和清晰的想法。
我正在编写一个应用程序,它将从第三方提供的密码保护的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
可用于以其他用户身份启动命令提示符