首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在.NET C#中存储加密密钥的最佳方法

在.NET C#中存储加密密钥的最佳方法
EN

Stack Overflow用户
提问于 2011-02-11 17:17:45
回答 4查看 64.8K关注 0票数 72

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

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

在.NET中存储加密密钥的最好方法是什么,这样就没有人可以使用Reflector读取它们?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-11 17:30:22

如果您想保护您的数据不受其他用户的影响。看一下ProtectedData类。

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

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

使用ProtectedData/DPAPI可以将您从处理密钥和保护数据中解放出来。您可以选择保护当前用户的数据。相同的域用户可以从不同的计算机读取数据。

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

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

票数 23
EN

Stack Overflow用户

发布于 2012-07-12 23:20:46

你应该使用机器密钥库,它是一个安全的存储,特别是为了这个目的。例如:

代码语言:javascript
复制
CspParameters cspParams = new CspParameters(PROV_RSA_FULL, null, KEYNAME);

cspParams.Flags = CspProviderFlags.UseMachineKeyStore;

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParams);

其中KEYNAME是一个自定义字符串,可用于以后检索密钥。

有关更多示例,请参阅此问题:How to store a public key in a machine-level RSA key container

票数 11
EN

Stack Overflow用户

发布于 2011-02-11 17:35:08

通常,应该为每个会话创建新的密钥和IV,并且不应该存储密钥和IV以供以后的会话使用。

要将对称密钥和IV传递给远程方,通常会使用非对称加密对对称密钥和IV进行加密。在不加密的情况下通过不安全的网络发送这些值是非常不安全的,因为任何截获这些值的人都可以解密您的数据。有关此加密和传输密钥和IV的过程的详细信息,请参阅Creating a Cryptographic Scheme

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4967325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档