如何使用 Mimekit 检查 MIME 消息是否加密或签名?
How to check if a MIME message is encrypted or signed using Mimekit?
我只想检查 MIME 消息是否使用 Mimekit 加密或签名。
我不想解密或验证它的签名,我只想知道它是否加密或签名。
我希望找到它作为函数:MimeMessage 中的 IsSigned() 和 IsEncrypted() Class 但这些函数不存在!
谢谢。
这些方法不存在,因为 MimeMessage
本身无法签名或加密,只有消息的 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
,所以无论哪种情况,您都必须检查一下。
因为我曾经使用过的每个客户或从只有 ever sign and/or 收到的邮件都会加密邮件的 top-level Body
部分,所以上面的检查可能都是你的'会需要的但是,可能 MIME-compliant 客户端签署 and/or 加密 Body
的子部分,因此您必须遍历 MIME 树并检查每个节点是否要 100% 合规。
我只想检查 MIME 消息是否使用 Mimekit 加密或签名。
我不想解密或验证它的签名,我只想知道它是否加密或签名。
我希望找到它作为函数:MimeMessage 中的 IsSigned() 和 IsEncrypted() Class 但这些函数不存在!
谢谢。
这些方法不存在,因为 MimeMessage
本身无法签名或加密,只有消息的 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
,所以无论哪种情况,您都必须检查一下。
因为我曾经使用过的每个客户或从只有 ever sign and/or 收到的邮件都会加密邮件的 top-level Body
部分,所以上面的检查可能都是你的'会需要的但是,可能 MIME-compliant 客户端签署 and/or 加密 Body
的子部分,因此您必须遍历 MIME 树并检查每个节点是否要 100% 合规。