EWS — электронная почта с цифровой подписью (smime.p7m)

Я пытаюсь прочитать содержимое электронной почты с цифровой подписью с помощью 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>

person Rafal Zak    schedule 21.02.2017    source источник
comment
Добро пожаловать в Stack Overflow! Скорее всего, вы получите больше и лучше помощь, если также опубликуете свой код. При публикации кода убедитесь, что это минимальный, полный и проверяемый пример.   -  person Lex Scarisbrick    schedule 22.02.2017
comment
Попробуйте просто fileAttachment.Load(); и тогда fileAttachment.Content будет attactment. затем попробуйте свои расшифровки ... может быть, покажите, что значит быть подписанным. также вы теперь работаете с вложением, а не с электронным письмом, не уверенным, что оба подписаны и / или что это означает.   -  person Seabizkit    schedule 22.02.2017
comment
@ Rafal-Zak Я столкнулся с той же проблемой. Вы нашли решение для этого?   -  person Peter    schedule 21.11.2018


Ответы (1)


не тестировалось, поэтому, пожалуйста, дайте мне знать, что я могу себе представить что-то подобное...

foreach (Attachment attachment in emailMessage.Attachments)
{
    FileAttachment fileAttachment = attachment as FileAttachment
    if (attachment != null)
    {        
         fileAttachment.Load();
         if (fileAttachment.Name == "smime.p7m")                        
         {
              byte[] content = fileAttachment.Content;

              var encrypted = new EnvelopedCms();
              encrypted.Decode(content);
              encrypted.Decrypt();
              byte[] unencryptedButRawMimeEntity = encrypted.ContentInfo.Content;
         }
    }
}
person Seabizkit    schedule 22.02.2017
comment
Это упрощает код, но результат тот же — исключение ASN1 — неверное значение тега, обнаруженное в операции шифрования.Decode(). Я работаю с вложениями, потому что стремлюсь получить/проверить вложения из таких писем. Он помечен как подписанный в Outlook и содержит одно вложение в формате PDF. Для других писем код работает нормально, но подписанное выглядит так, будто внутри есть одно вложение smime.p7m. - person Rafal Zak; 22.02.2017
comment
больше об электронной почте: вывод консоли EWS говорит, что он имеет одно FileAttachment Content-Type=multipart/signed - person Rafal Zak; 22.02.2017
comment
я не знаю, но после этого stackoverflow.com /questions/21629206/, который, я уверен, вы видели... он предлагает вам расшифровать исходное письмо, содержащее вложение, а не само вложение. Созу было трудно следовать, может быть, это имеет больше смысла для вас. - person Seabizkit; 23.02.2017