我正在嘗試使用EWS閱讀數字簽名電子郵件的內容。不幸的是,當我使用的方法與EnvelopeCMS我得到一個異常:EWS - 數字簽名電子郵件(smime.p7m)
System.Security.Cryptography.CryptographicException:ASN1 - 壞標籤 價值滿足。
在System.Security.Cryptography.Pkcs.EnvelopedCms.OpenToDecode(字節[] encodedMessage)
在System.Security.Cryptography.Pkcs.EnvelopedCms.Decode(字節[] 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輸出控制檯說,它有一個附件「mutipart /簽訂了」內涵式
<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>
歡迎堆棧溢出!如果您發佈代碼,則可能會獲得更多更好的幫助。發佈代碼時,確保它是[最小,完整且可驗證的示例](http://stackoverflow.com/help/mcve)。 –
試試只是fileAttachment.Load();然後fileAttachment.Content將成爲附件。然後嘗試解密的東西......也許顯示簽名的含義。你現在正在使用附件,而不是電子郵件不確定是否簽名和/或意味着什麼。 – Seabizkit