【问题标题】:Encrypting config files for deployment加密配置文件以进行部署
【发布时间】:2010-10-08 12:02:45
【问题描述】:

我有一个从 app.config 读取的 Windows 服务。

我希望对某些设置进行加密,但是,我不想使用 .NET 中提供的 ProtectedConfigurationProvider 类,因为它们使用 DPAPI 根据运行它们的机器对文件进行加密。

我想要的是让我们的管理员能够将已经加密的配置文件部署到多台机器上,并让每台机器在需要时对其进行解密。

我也不想将密码硬编码到程序集中,所以我不知道该怎么做。

【问题讨论】:

标签: .net encryption app-config


【解决方案1】:

将问题简化为最简单的形式:

  • 你有一个程序
  • 将获得一个加密文件
  • 你想解密文件
  • 无需对密钥进行硬编码

显而易见的解决方案是在需要时向受信任的第三方索取密钥

【讨论】:

  • 受信任的第三方不一定是用户。可能是某种身份验证服务器
【解决方案2】:

执行此操作的一种可能方法是将解密密钥包含在文件的开头,并且该密钥已以您可以从密钥中确定的某种方式重新处理。一种可能性是选择,比如说十六个不同的东西,比如,0 表示将前两个字节旋转到末尾; 1 将最后两个字节旋转到前面; 2 每个字节加 1;等等 14 个附加功能。现在将此值添加到键前面作为“重新处理标志”。

然后,密钥的第一个字节将成为 16 个不同例程之一的分支表,以说明如何处理密钥。请注意,重新处理标志不必是第一个字节,它可以是密钥中的任何字节,只要您记得在处理密钥时丢弃该字节即可。

然后您根据您将使用的任何解密算法处理密钥。

现在,鉴于这个重新处理标志 - 特别是如果整个密钥是十六进制的 - 将需要有人按照逻辑来确定您的代码执行了 16 个不同函数中的哪一个,然后找出解密方法。它不会阻止每个人,但它可能会很好地驱走除了最坚定的人之外的所有人。

【讨论】:

  • 从技术上讲,这仍然是对密钥进行硬编码,只是在配置文件中进行了混淆,而不是在代码中存在 - 尽管为深思熟虑的答案 +1!
猜你喜欢
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 2012-04-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
相关资源
最近更新 更多