使用smime.p7m签名的邮件(未加密)

时间:2018-08-15 15:36:52

标签: c# base64 exchangewebservices

我尝试从一个签名邮件中提取一个或多个PDF文件。我只是尝试用

加载smime.p7m
  

mimeMessage = MimeMessage.Load(mem);   // mem是使用File.WriteAllBytes(file,fileAttachment.Content)创建的File中的MemoryStream。 (EWS FileAttachment)

这不起作用,因为文件开头为:

  

0€*†H†÷   €0€10 + 0€*†H†÷   €$€,   &Content-Type:多部分/混合;       boundary =“ ---- = _ NextPart_000_0024_01D432F9.7988F010”

所以我删除了Content-Type(带有IndexOf,Substring)之前的东西(这里不是全部可见)..现在我可以将其加载到MineMessage中。现在我尝试对Base64字符串进行解码,但是如果我使用encodeto方法,则文件大小几乎相同 但是文件已损坏,如果我查看由Outlook解码的原始PDF文件和解码后的原始PDF文件的原始数据,它们几乎相同,但是在最后10%中它们是不同的(在原始文件中有更多的换行符)。

所以我尝试使用

  

Convert.FromBase64String()   但是我总是得到无效的base64代码异常

带标题的PDF部分以:

开头
  

Content-Type:应用程序/ pdf;       name =“ DE_Windows 7_WebDAV.pdf”   内容传输编码:base64   内容处置:附件;       filename =“ WebDAV.pdf”

     

,JVBERi0xLjUNCiW1tbW1DQoxIDAgb ...

(在之前和之后,此处看不到字符,我也删除了它们)。如果我将base64代码(使用Windows编辑器复制并粘贴为文本)加载到onlinedecoder中,则它正在解码,如果我使用base64code上传文件,它将失败... 并且base64内的内容不是base64字符“ unknown”,“,”,“ Uparrow Symbol”,我认为这会终止解码,对于这里=((参见图片)base64

但是这1:1是什么File.WriteAllBytes(file,fileAttachment.Content);或/和fileAttachment.Load(file);保存

你能帮我吗?而这个未知的字符从哪里来?

1 个答案:

答案 0 :(得分:0)

好吧,我明白了……我的生命浪费了两天

在保存签名的附件之前,您必须运行此代码以“取消签名”,并且所有您不想要的字符都消失了=)

  

byte [] content = fileAttachment.Content;

     

varsigned = new SignedCms();

     

signed.Decode(content);

     

byte [] unsigned = signed.ContentInfo.Content;