在.NET C#中存储加密密钥的最佳方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (83)

在我们的应用程序中,我们有很多敏感的配置设置,我们将它们存储在一个xml文件中,该文件又被加密。

此安全文件必须在运行时解密并读取配置值。但出现了一个问题,即密钥和初始化矢量在代码中是硬编码的,因此任何人都可以使用Reflector读取它。

在.NET中存储加密密钥的最佳方式是什么?所以没有人可以使用Reflector读取它们?

提问于
用户回答回答于

如果你想保护其他用户的数据。看看ProtectedData类。

这些类使用Windows的DPAPI来加密和解密用户或机器级别的数据。

使用ProtectedData / DPAPI可使你免于处理密钥并自行保护数据。可以选择保护当前用户的数据。数据可以通过相同的域用户从不同的计算机读取。

如果你想创建自己的密钥。您可以为每个用户/机器创建一个密钥,并将该密钥存储在注册表中。由于注册表可以被保护,只有当前用户可以读取密钥。我知道注册表有不良的业力,但实际上它非常擅长存储这样的数据。

不要把你的代码放入IV中。每次创建一个新的IV,并将其放在数据的前面。

用户回答回答于

如果你不能用反射器阅读它们,你期望程序如何阅读它们?你可以通过打破它们并将所有部分存储在整个地方来模糊它们,但是(AFAIK)一旦你需要你的程序能够读取它们,那么任何有权访问你的代码的人都可以阅读它们。

不要忘记内存中的值也可以被访问。

扫码关注云+社区