C# Bouncy Castle API如何知道使用哪个密钥加密?
我很好奇Bouncy Castle API处理多个公钥以加密数据的过程。例如,如果我有3个不同的客户端希望我加密数据并使用其公钥向其发送加密,如果我分别标记每个客户端的公钥-bouncy castle如何确定客户端1应使用公钥1而不是公钥3加密(这将是客户端3的公钥)C# Bouncy Castle API如何知道使用哪个密钥加密?,c#,bouncycastle,openpgp,C#,Bouncycastle,Openpgp,我很好奇Bouncy Castle API处理多个公钥以加密数据的过程。例如,如果我有3个不同的客户端希望我加密数据并使用其公钥向其发送加密,如果我分别标记每个客户端的公钥-bouncy castle如何确定客户端1应使用公钥1而不是公钥3加密(这将是客户端3的公钥) 从解密的角度来看,publicKeyEncryptedData似乎附带了一个keyID标签,可以用来查找相应的私钥,但我不明白它如何选择正确的密钥进行加密。它没有。您必须指定所有收件人(即用于加密的证书)。使用PKCS#7进行加密
从解密的角度来看,publicKeyEncryptedData似乎附带了一个keyID标签,可以用来查找相应的私钥,但我不明白它如何选择正确的密钥进行加密。它没有。您必须指定所有收件人(即用于加密的证书)。使用PKCS#7进行加密时,过程是:
- 生成随机对称密钥(即AES256)
- 使用对称密钥加密数据
- 使用收件人的公钥加密对称密钥(如果X个收件人应该能够解密,则将对称密钥加密X次)
- 将其全部放在PKCS#7中(加密的对称密钥放在一个带有接收者标识的结构中。通常是用于对称密钥加密的证书的序列号和颁发者DN)
- 查找能够解密邮件的收件人。PKCS#7包含应该能够解密的所有收件人的序列号和颁发者DNs。现在,在crypto store中查找具有序列号和具有相应私钥的颁发者DN的证书。如果加密存储中有所有收件人的私钥,则使用哪个私钥并不重要
- 使用私钥解密加密过程中使用的对称密钥
- 使用对称密钥解密数据