c# - 从经过签名和加密的邮件中获取公共(public)证书

标签 c# encryption mail-server

我将整个邮件作为一个字符串进行加密和签名。

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

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

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

最佳答案

这将取决于所使用的签名类型,但如果您知道电子邮件在哪里结束以及电子邮件的签名部分从哪里开始,那么您应该能够使用 .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节开始

关于c# - 从经过签名和加密的邮件中获取公共(public)证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8118587/

相关文章:

c# - 如何将 HSM 加密与 C# 集成?

javascript - 使用 openpgp 将 javascript 二进制文件解密为文本

scala - 使用 Scala 接收和发送电子邮件

c# - 如何使用 C# 互操作传递 dbFailOnError 参数?

c# - Elmah 日志错误页面自定义

C# Interop - 释放在非托管代码中分配的内存

java - AES 解密错误 : android pad block corrupted

c# - 如何在 Visual Studio 中找到 Team Foundation Server 的 url?

email - 想要根据用户名和主题自动处理电子邮件附件

java - 如何用 Java 发送电子邮件?