如何使用Mimekit检查MIME邮件是否已加密或签名?

时间:2017-01-11 14:58:26

标签: c# mimekit

我想要检查MIME消息是否使用Mimekit进行加密或签名。

我不想解密或验证其签名,我只是想知道它是加密还是签名。

我希望找到它作为函数:IsSigned()&在MimeMessage类中是IsEncrypted()但这些函数不存在!

谢谢。

1 个答案:

答案 0 :(得分:4)

这些方法不存在,因为MimeMessage本身无法签名或加密,只能对邮件的Body(或正文的一部分)进行签名或加密。< / p>

一个非常简单的解决方案是:

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(可以)都使用MultipartSigned,所以你必须在任何一种情况下检查它。

由于我曾经使用或接收邮件的每个客户只能对邮件的顶级Body部分进行签名和/或加密,因此您可能需要进行上述检查。但是,对于符合MIME的客户端,可能可以签署和/或加密Body的子部分,因此您必须遍历MIME树并检查每个节点是否你希望100%合规。