3

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

加密或解密数据时没有存储或提供公钥或私钥!我无法理解。

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

4

1 回答 1

6

RSACryptoServiceProvider 构造函数

如果未找到默认密钥,则会创建一个新密钥。

此构造函数创建一个适用于加密会话密钥的交换密钥对,以便可以安全地存储它们并与其他用户交换。生成的密钥对应于使用非托管 Microsoft 加密 API (CAPI) 中使用的 AT_KEYEXCHANGE 值生成的密钥。

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

 

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

您可以通过执行查看您的证书Start > Run > certmgr.msc。您的证书位于个人 > 证书下。如果您打开一个,然后转到Certificate Path选项卡,您将看到证书链到一个证书颁发机构。如果在您的商店中找到属于证书颁发机构的“根”证书,Trusted Root Certification Authorities > Certificates则该证书被视为有效且受信任。

如果你想为用户加密某些东西,你应该进入他的证书存储,并取出他的加密证书。为此,您应该打开“当前用户”密钥库,并遍历其中的所有证书,并挑选出具有“密钥加密”密钥用法的证书,如果有多个,请询问用户的哪个他想用。

If you want to encrypt something using a service account (for example if you were a web server) you should use certificates found in the "Local Machine" key store, and only grant your service account read access to the private key associated with the certificate you want to use.

This can be done using X509Store Class, for example:

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

"MY" represents personal certificates, the rest can be found here. CurrentUser represents user keys, the other option is LocalMachine.

Once you have the certificate you want to use, you should use the public key for encryption, and the private key for decryption, in conjunction with a symmetric key. So if you had a big set of data you wanted to encrypt, what you would do is:

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

解密时,您应该:

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

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

这可能有点令人困惑,所以让我知道你想要澄清什么。

于 2012-06-01T15:07:02.953 回答