C# net的S/MIME库?

C# net的S/MIME库?,c#,encryption,mime,C#,Encryption,Mime,我需要使用C#(如RFC 2633,“S/MIME版本3消息规范”和RFC 3335中所述)创建S/MIME消息。 我能找到的唯一S/MIME库是一个商业库(),这对我们没有好处 是否有任何现有库可以完成创建S/MIME消息,尤其是.p7s文件 我有所有需要进入该文件的加密和签名元素,但我想创建.p7s文件,而不需要借助RFC文档手动滚动我自己的库 编辑: 我找到了另一个,它仍然不符合我们的要求。 它看起来越来越像我将不得不手卷一个s/MIME库,这是可悲的。 .net中需要S/MIME的每个

我需要使用C#(如RFC 2633,“S/MIME版本3消息规范”和RFC 3335中所述)创建S/MIME消息。 我能找到的唯一S/MIME库是一个商业库(),这对我们没有好处

是否有任何现有库可以完成创建S/MIME消息,尤其是.p7s文件

我有所有需要进入该文件的加密和签名元素,但我想创建.p7s文件,而不需要借助RFC文档手动滚动我自己的库


编辑: 我找到了另一个,它仍然不符合我们的要求。 它看起来越来越像我将不得不手卷一个s/MIME库,这是可悲的。
.net中需要S/MIME的每个人都使用商业的、封闭源代码库来完成吗?

我没有使用这个S/MIME库,但我的应用程序使用了同一供应商的另一个库,它工作正常:

他们的p7s签名库是独立的,这可能是一个问题,取决于您的预算:


实现完整的s/mime非常困难,因为它需要大量额外的工作。您可以将其用于您的任务


更新:SecureBackbox是我们的产品。它完全支持Silverlight和Windows Phone(包括Mango)

看一看。这是我使用多年的一个非常稳定的库。它是100%托管代码,源代码也可用。

CodeProject上有一个相当不错的s/MIME类


我花了很多时间为.NET寻找一个好的S/MIME库,但运气不好。我最终创造了我自己的,叫做OpaqueMail

它是开源的,完全免费。它继承自System.Net.Mail.SmtpClient类,因此移植现有代码非常简单。它还包括用于处理POP3和IMAP的类

请点击查看

发送S/MIME三重包装消息(经过数字签名、加密,然后再次进行数字签名)的示例如下:


希望这能有所帮助。

我已经编写了自己的MIME库,支持名为S/MIME的文件,它比基于System.Net.Mail的文件要健壮得多,而System.Net.Mail的文件已经严重损坏


它支持原始8位头、rfc822组地址、从地址头(To/Ccc/Bcc/etc)中的rfc822注释中删除名称、解析mbox格式的消息假脱机(包括支持基于内容长度的SunOS格式)它比任何其他C#MIME解析器都快一个数量级,因为它是基于字节流而不是基于文本阅读器的(这也是它比任何其他C#解析器更好地支持原始8比特头的方式)。

即使成本不是问题(我肯定会是这样),另一个问题是chilkatsoft如何提供这些库。我敢打赌,他只是提供了一些DLL,您可以很高兴地使用VisualStudio?我的老板对于vs.net来说太便宜了,我们使用的就像我说的,我们使用的是VisualWebdev,它的DLL功能相当有限。具体来说,没有编译到DLL,我认为它与国外DLL的互操作性非常有限,尽管我可能是错的。哦,我多么渴望visual studio!我刚开始使用你的图书馆,真是太棒了,谢谢!不过,我注意到的一件事是,Android或iOS上似乎不存在MimeKit.Cryptography名称空间(还没有?)。是否也有计划在Android和iOS上支持S/MIME?我这样问是因为我寻找S/MIME库的主要目的是在移动平台上编写应用程序。谢谢是的,我只是还没来得及去做。我会尽快解决这个问题。刚刚向MimeKit提交了一个补丁,为iOS和Android构建了所有S/MIME和PGP支持:-)很棒的库,而且文档也很好-谢谢!
// Instantiate a new SMTP connection to Gmail using TLS/SSL protection.
SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587);
smtpClient.Credentials = new NetworkCredential("username@gmail.com", "Pass@word1");
smtpClient.EnableSsl = true;

// Create a new MailMessage class with lorem ipsum.
MailMessage message = new MailMessage("username@gmail.com", "user@example.com", "Example subject", "Lorem ipsum body.");

// Specify that the message should be signed, have its envelope encrypted, and then be signed again (triple-wrapped).
message.SmimeSigned = true;
message.SmimeEncryptedEnvelope = true;
message.SmimeTripleWrapped = true;

// Specify that the message should be timestamped.
message.SmimeSigningOptionFlags = SmimeSigningOptionFlags.SignTime;

// Load the signing certificate from the Local Machine store.            
message.SmimeSigningCertificate = CertHelper.GetCertificateBySubjectName(StoreLocation.LocalMachine, "username@gmail.com");

// Send the message.
await smtpClient.SendAsync(message);