asp.net - 加密 key 存储在哪里?

标签 asp.net security cryptography encryption-asymmetric

我是密码学新手。我读到对称和非对称算法分别使用一个和两个加密 key 。并且这些 key 必须存放在安全的地方。但是当我在网上搜索有关如何在 ASP.NET 中进行加密的教程时,我发现了一些奇怪的东西!例如this tutorial

加密或解密数据时没有存储或提供公钥或私钥!我不明白。

我遇到的另一个问题是,到目前为止我找到的所有教程都只是代码,没有任何关于这些代码是什么以及为什么使用的解释。我很感谢建议的任何好的教程。

最佳答案

来自RSACryptoServiceProvider Constructor :

If no default key is found, a new key is created.

This constructor creates an Exchange key pair suitable to encrypt session keys so that they can be safely stored and exchanged with other users. The generated key corresponds to a key generated using the AT_KEYEXCHANGE value used in the unmanaged Microsoft Cryptographic API (CAPI).

因此,如果找不到已经创建的 key 对,它只是生成一个新的 key 对;除了基于 session 的数据之外,您不应该使用它。

 

一点背景知识(我假设您使用 Windows),非对称 key 对与证书相关联。您可以使用这些证书来信任非对称 key 。每个证书都可以由证书颁发机构(颁发非对称 key 的机构)进行签名,如果您信任证书颁发机构,那么您就信任属于该机构签名的证书的非对称 key 。所有这些证书都存储在您的“证书存储”中,也称为“ key 存储”(Java)、“ key 环”(Mac)。

您可以通过执行开始 > 运行 > certmgr.msc 来查看您的证书。您的证书位于个人 > 证书下。如果您打开一个,然后转到“证书路径”选项卡,您将看到直至证书颁发机构的证书链。如果在您的受信任的根证书颁发机构 > 证书存储中找到属于证书颁发机构的“根”证书,则该证书被视为有效且受信任。

如果您想为用户加密某些内容,您应该进入他的证书存储区,并提取他的加密证书。为此,您应该打开“当前用户” key 存储,并遍历其中的所有证书,并挑选出 key 用途为“ key 加密”的证书,如果有多个,则询问用户是哪一个他想使用。

如果您想使用服务帐户加密某些内容(例如,如果您是 Web 服务器),您应该使用“本地计算机” key 存储中找到的证书,并且仅授予您的服务帐户对关联私钥的读取权限与您要使用的证书。

这可以使用 X509Store Class 来完成,例如:

X509Store certificateStore = new X509Store("MY", StoreLocation.CurrentUser);
X509Certificate2Collection allCertificates = certificateStore.Certificates;
//Iterate through all certificates

“MY”代表个人证书,其余可查here 。 CurrentUser代表用户 key ,另一个选项是LocalMachine。

获得要使用的证书后,您应该结合对称 key 使用公钥进行加密,使用私钥进行解密。因此,如果您有大量想要加密的数据,您要做的是:

  1. 获取证书
  2. 从证书中提取公钥
  3. 生成对称 key (AES)
  4. 使用对称 key 加密数据
  5. 使用公钥加密对称 key
  6. 将加密的对称 key 与加密的数据一起存储,以及用于加密的证书的标识符(序列号)

解密时你应该:

  1. 从加密数据中读取序列号
  2. 使用该序列号从 key 存储中提取证书
  3. 从该证书中提取私钥
  4. 使用该私钥解密对称 key
  5. 使用该对称 key 解密数据
  6. 使用数据

我有一堆代码示例可以完成此任务,如果您想看一下,请告诉我您需要哪一部分的帮助。

这可能有点令人困惑,所以请让我知道您想要澄清的内容。

关于asp.net - 加密 key 存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10851509/

相关文章:

security - 在 ASP.NET Web API 中,如何防止来自没有 cookie 的客户端的 CSRF 攻击?

asp.net-mvc - 通用 SSO 解决方案

java - AES加密解密无法正常工作--Android

security - 用户的Kerberized Hadoop登录失败…LoginException:校验和失败

php - 使用 ECDSA P-256 SHA-256 使用 PHP 创建 JWT

cryptography - 使用 Tossim 安装 TinyECC

c# - Eval 在代码隐藏中

c# - 数据类型 ntext 和 nvarchar 在等于运算符中不兼容

c# - Visual Studio 2012 无法识别现有的单元测试

c# - 在某些字符前后修剪字符串