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

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

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

推荐答案

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

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

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

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

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

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

.net相关问答推荐

问:在 Blazor WASM 应用程序中存储 api 密钥的最佳方式是什么?

如何正确使用“await using”语法?

将客户端证书添加到 .NET Core HttpClient

错误 NU1605 检测到包降级

无法从 Microsoft.Extensions.Logging 解析 ILogger

您可以使用 Xamarin 开发 Linux 应用程序吗?

C#6.0 字符串插值本地化

EF Core 添加迁移构建失败

检测到包降级警告(dotnet core,vs 2017)

软件包版本始终为 1.0.0,带有 dotnet pack

我可以先使用 EF 代码和 .net 核心生成迁移脚本吗

IIS Express - 500.19 无法读取配置文件 - 因为它正在查看错误的路径

Windows SDK 7.1 安装失败

如何下载没有 nuget.exe 或 Visual Studio 扩展的 Nuget 包?

[DllImport("QCall")] 是什么?

为什么使用 ImmutableList 而不是 ReadOnlyCollection?

使用 C# 设置全局热键

使用 C# 将文件上传到 FTP

创建一个已完成的任务

MongoDB C# 驱动程序 - 忽略绑定字段