3

我将整个邮件作为一个经过加密和签名的字符串。

默认情况下,如果收件人没有发件人的公共证书,则 Outlook Express 中的默认情况下,将从邮件中提取公共证书并将其存储到证书管理器中。所以稍后我们可以回复该邮件,该邮件也将被加密和签名

我想使用 c# 实现相同的功能。

如何从邮件文本中提取公共证书并将其存储到证书管理器中?

4

1 回答 1

3

这将取决于所使用的签名类型,但如果您知道电子邮件在哪里结束以及电子邮件的签名部分从哪里开始,那么您应该能够使用 .NET 中名为 System.Security 的类来解析这些信息。 Cryptography.Pkcs.SignedCms。

这可能看起来像一个伪代码示例......我做了几个假设,如果需要,我们可以进一步讨论。函数引用期望在它们后面完成一些事情。如果需要,我们可以进一步讨论这些方法中需要什么。

var rawEmailBytes = pseudo_GetRawEmail();  // function that gets the raw email
var signedCmsBytes = psuedo_GetSignedCmsData(rawEmailBytes)   // would pull out the signed package bytes from the email
var signedCms = new SignedCms();
signedCms.Decode(signedCmsBytes)

foreach (var certificate in signedCms.Certificates) {
   psuedo_StoreCertificate(certificate)   // store certificate using the cert manager.
}

无法保证证书将存储在此集合中,因为证书是否包含在签名包中是可选的。如果您想进一步讨论,请添加注释。

此外,如果您想查看有关此签名类型的 RFC,可以在 URL http://www.ietf.org/rfc/rfc3852.txt阅读。具体看Signed Data类型,从5.1节开始

于 2011-12-07T16:37:36.577 回答