3

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

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

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

谢谢你。

4

1 回答 1

4

这些方法不存在,因为 aMimeMessage本身不能被签名或加密,只有Body消息的(或正文的子集)可以被签名或加密。

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

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.

于 2017-01-18T22:20:03.237 回答