Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Bouncy Castle API如何知道使用哪个密钥加密?_C#_Bouncycastle_Openpgp - Fatal编程技术网

C# Bouncy Castle API如何知道使用哪个密钥加密?

C# Bouncy Castle API如何知道使用哪个密钥加密?,c#,bouncycastle,openpgp,C#,Bouncycastle,Openpgp,我很好奇Bouncy Castle API处理多个公钥以加密数据的过程。例如,如果我有3个不同的客户端希望我加密数据并使用其公钥向其发送加密,如果我分别标记每个客户端的公钥-bouncy castle如何确定客户端1应使用公钥1而不是公钥3加密(这将是客户端3的公钥) 从解密的角度来看,publicKeyEncryptedData似乎附带了一个keyID标签,可以用来查找相应的私钥,但我不明白它如何选择正确的密钥进行加密。它没有。您必须指定所有收件人(即用于加密的证书)。使用PKCS#7进行加密

我很好奇Bouncy Castle API处理多个公钥以加密数据的过程。例如,如果我有3个不同的客户端希望我加密数据并使用其公钥向其发送加密,如果我分别标记每个客户端的公钥-bouncy castle如何确定客户端1应使用公钥1而不是公钥3加密(这将是客户端3的公钥)


从解密的角度来看,publicKeyEncryptedData似乎附带了一个keyID标签,可以用来查找相应的私钥,但我不明白它如何选择正确的密钥进行加密。

它没有。您必须指定所有收件人(即用于加密的证书)。使用PKCS#7进行加密时,过程是:

  • 生成随机对称密钥(即AES256)
  • 使用对称密钥加密数据
  • 使用收件人的公钥加密对称密钥(如果X个收件人应该能够解密,则将对称密钥加密X次)
  • 将其全部放在PKCS#7中(加密的对称密钥放在一个带有接收者标识的结构中。通常是用于对称密钥加密的证书的序列号和颁发者DN)
解密过程是:

  • 查找能够解密邮件的收件人。PKCS#7包含应该能够解密的所有收件人的序列号和颁发者DNs。现在,在crypto store中查找具有序列号和具有相应私钥的颁发者DN的证书。如果加密存储中有所有收件人的私钥,则使用哪个私钥并不重要
  • 使用私钥解密加密过程中使用的对称密钥
  • 使用对称密钥解密数据

Bouncy castle是开源的,因此您可以通过调试示例来回答您的问题。