Я пытаюсь прочитать содержимое электронной почты с цифровой подписью с помощью EWS. К сожалению, когда я использую подход с EnvelopeCMS, я получаю исключение:
System.Security.Cryptography.CryptographicException: ASN1 — встречено неверное значение тега.
в System.Security.Cryptography.Pkcs.EnvelopedCms.OpenToDecode(Byte[] encodedMessage)
в System.Security.Cryptography.Pkcs.EnvelopedCms.Decode(Byte[] encodedMessage) в myExchange.Email.DecryptToFile(Byte[] данные )
(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 говорит, что она имеет одно вложение с типом содержимого "mutipart/signed".
<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>