【发布时间】:2017-07-11 16:02:03
【问题描述】:
我正在尝试使用 EWS 阅读数字签名电子邮件的内容。不幸的是,当我使用 EnvelopeCMS 的方法时出现异常:
System.Security.Cryptography.CryptographicException: ASN1 - 错误标签 满足的价值。
在 System.Security.Cryptography.Pkcs.EnvelopedCms.OpenToDecode(Byte[] 编码消息)
在 System.Security.Cryptography.Pkcs.EnvelopedCms.Decode(Byte[] encodedMessage) 在 myExchange.Email.DecryptToFile(Byte[] data)
(encodedMessage 是电子邮件的 smime.p7m 附件)。
编辑:这是一个关键的代码片段:
foreach (Attachment attachment in emailMessage.Attachments)
{
if (attachment is FileAttachment)
{
FileAttachment fileAttachment = attachment as FileAttachment;
if (fileAttachment.Name == "smime.p7m")
{
byte[] content = fileAttachment.Content;
MemoryStream stream = new MemoryStream();
fileAttachment.Load(stream);
StreamReader stReader = new StreamReader(stream);
stream.Seek(0, SeekOrigin.Begin);
content = stream.GetBuffer();
var encrypted = new System.Security.Cryptography.Pkcs.EnvelopedCms();
encrypted.Decode(content); // <==== Here occurs exception
encrypted.Decrypt();
byte[] unencryptedButRawMimeEntity = encrypted.ContentInfo.Content;
}
}
}
关于电子邮件的更多信息 - EWS 输出控制台说,它有一个“多部分/签名”内容类型的附件
<m:ResponseCode>NoError</m:ResponseCode>
<m:Attachments>
<t:FileAttachment>
<t:AttachmentId Id="AAMkADNi(... CUT ...)T5PWd/bDM=" />
<t:Name>smime.p7m</t:Name>
<t:ContentType>multipart/signed</t:ContentType>
【问题讨论】:
-
欢迎来到 Stack Overflow!如果您也发布代码,您可能会获得更多更好的帮助。发布代码时,请确保它是minimal, complete and verifiable example。
-
试试 fileAttachment.Load();然后 fileAttachment.Content 将是附件。然后尝试您的解密内容...也许显示签名的含义。此外,您现在正在处理附件而不是电子邮件,不确定两者是否都已签名和/或这意味着什么。
-
@Rafal-Zak 我遇到了同样的问题。您找到解决方案了吗?
标签: email exchangewebservices decoding smime