在我们的应用程序中,我们有很多敏感的配置设置,我们将这些设置存储在一个xml文件中,该文件再次加密.

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

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

推荐答案

如果你想保护你的数据免受其他用户的攻击.看看ProtectedData班.

(免责声明:保护您的数据以创建版权保护方案不在此答案中).

此类使用Windows中的DPAPI在用户或计算机级别加密和解密数据.

使用ProtectedData/DPAPI可以让您不必亲自处理密钥和保护数据.您可以 Select 为当前用户保护数据.相同的域用户可以从不同的计算机读取数据.

如果您想创建自己的密钥.您可以 for each 用户/机器创建一个密钥,并将该密钥存储在注册表中.因为注册表是安全的,所以只有当前用户才能读回密钥.我知道注册表有不好的业力,但实际上它非常擅长存储这样的数据.

注:不要把静脉注射放在你的密码里.每次创建一个新的IV,并将其放在数据前面.

.net相关问答推荐

API响应返回null错误. NET MAUI

获取Ef-Core集合的DeleteBehavior

如何手动注入依赖注入

.NET MAUI 的登录页面

如何找到windows服务exe路径

既然 .NET 有一个垃圾收集器,为什么我们需要终结器/析构器/dispose-pattern?

.Include() 与 .Load() 在 EntityFramework 中的性能

在 WinForms 应用程序中查找焦点控件的首选方法是什么?

LINQ:确定两个序列是否包含完全相同的元素

HttpClient 和使用代理 - 不断得到 407

什么是 project.lock.json?

Int 到字节数组

变量MyException已声明但从未使用

在 C# 中将字符串转换为十六进制字符串

在 C# 中与块等效?

VB.NET 与 C# 整数除法

铸造:(NewType)与对象作为NewType

泛型类的默认构造函数的语法是什么?

System.Array.CopyTo() 和 System.Array.Clone() 之间的区别

在构建事件命令行中放置注释的正确方法?