C# 如何检查MIME消息是否使用Mimekit加密或签名?
我只想检查MIME消息是否使用Mimekit加密或签名 我不想解密它或验证它的签名,我只想知道它是加密的还是签名的 我希望在MimeMessage类中找到函数:IsSigned()&IsEncrypted(),但这些函数不存在C# 如何检查MIME消息是否使用Mimekit加密或签名?,c#,mimekit,C#,Mimekit,我只想检查MIME消息是否使用Mimekit加密或签名 我不想解密它或验证它的签名,我只想知道它是加密的还是签名的 我希望在MimeMessage类中找到函数:IsSigned()&IsEncrypted(),但这些函数不存在 谢谢。这些方法不存在,因为不能对MimeMessage本身进行签名或加密,只能对消息的正文(或正文的子集)进行签名或加密 一个非常简单的解决方案是: var pkcs7 = message.Body as ApplicationPkcs7Mime; bool signe
谢谢。这些方法不存在,因为不能对
MimeMessage
本身进行签名或加密,只能对消息的正文
(或正文的子集)进行签名或加密
一个非常简单的解决方案是:
var pkcs7 = message.Body as ApplicationPkcs7Mime;
bool signed = (message.Body is MultipartSigned) ||
(pkcs7 != null && pkcs7.SecureMimeType == SecureMimeType.SignedData);
bool encrypted = (message.Body is MultipartEncrypted) ||
(pkcs7 != null && pkcs7.SecureMimeType == SecureMimeType.EnvelopedData);
注意:MultipartEncrypted
仅与PGP(不是S/MIME)一起使用,因此如果您只关心S/MIME,则无需检查MultipartEncrypted
同样地,ApplicationPkcs7Mime
仅用于S/MIME,因此如果您只关心PGP,则无需检查ApplicationPkcs7Mime
不过,PGP和S/MIME(都可以)使用多部分签名
,因此在任何一种情况下都必须进行检查
由于我使用过或收到过的每个客户机都只对邮件的顶级
正文部分进行签名和/或加密,因此您可能只需要进行上述检查。但是,MIME兼容的客户端可以对正文的子部分进行签名和/或加密,因此如果希望100%兼容,您必须遍历MIME树并检查每个节点。谢谢,我想这就是我所需要的。