无法使用MimeKit解密p7m

编程入门 行业动态 更新时间:2024-10-25 18:23:00
本文介绍了无法使用MimeKit解密p7m的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我已经从我的电子邮件中找到了smime.p7m,我将其读取为流,并尝试使用MimeKit对其进行解密,但是由于Operation is not valid due to the current state of the object.

I have located my smime.p7m from my email message, I read it as stream and try to decrypt it using MimeKit, but it failed with Operation is not valid due to the current state of the object.

using (MemoryStream ms = new MemoryStream(data)) { CryptographyContext.Register(typeof(WindowsSecureMimeContext)); ApplicationPkcs7Mime p7m = new ApplicationPkcs7Mime(SecureMimeType.EnvelopedData, ms); var ctx = new WindowsSecureMimeContext(StoreLocation.CurrentUser); p7m.Verify(ctx, out MimeEntity output); }

遵循 github/jstedfast/MimeKit 上的示例无济于事任何一个.任何熟悉MimeKit的人都能听到提示音吗?

Following the example on github/jstedfast/MimeKit doesn't help either. Anyone familiar with MimeKit could chime in?

解密p7m之后,我应该使用MimeParser解析内容吗?我从解密中得到了以下信息:

After decrypting the p7m, am I supposed to use the MimeParser to parse the content? I got the following from the decryption:

Content-Type: application/x-pkcs7-mime; name=smime.p7m; smime-type=signed-data Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=smime.p7m MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAaCAJIAEWUNvbnRl bnQtVHlwZTogdGV4dC9wbGFpbjsNCgljaGFyc2V0PSJ1cy1hc2NpaSINCkNvbnRlbnQtVHJhbnNm ZXItRW5jb2Rpbmc6IDdiaXQNCg0KdGVzdA0KAAAAAAAAoIImTTCCBaIwggOKoAMCAQICBguC3JQz ...more...

但是使用MimeParser解析时,

System.FormatException: Failed to parse message headers. at MimeKit.MimeParser.ParseMessage(Byte* inbuf, CancellationToken cancellationToken) at MimeKit.MimeParser.ParseMessage(CancellationToken cancellationToken)

更新:

嗯,事实如此,调用Decrypt仅给了我SignedData,然后我需要调用Verify来提取原始数据...这有点误导,我以为Verify会简单地对其进行验证...这就是为什么我不打扰它的原因,因为我真的不需要验证它.也许应该改为调用Decode?那就是我最初试图做的,((MimePart) signedData).Content.DecodeTo(...).

Ah, so it turns, calling Decrypt only gives me the SignedData, I need to then call Verify to pull the original data... this is kind of misleading, I thought Verify would simply verify it... which is why I didn't bother calling it, since I don't really need to verify it... Perhaps it should be call Decode instead? That's what I was trying to do originally, ((MimePart) signedData).Content.DecodeTo(...).

所以最后,我不得不做类似的事情来提取数据.

So in the end, I had to do something like this to extract the data.

CryptographyContext.Register(typeof(WindowsSecureMimeContext)); ApplicationPkcs7Mime p7m = new ApplicationPkcs7Mime(SecureMimeType.EnvelopedData, ms); var ctx = new WindowsSecureMimeContext(StoreLocation.CurrentUser); if (p7m != null && p7m.SecureMimeType == SecureMimeType.EnvelopedData) { // the top-level MIME part of the message is encrypted using S/MIME p7m = p7m.Decrypt() as ApplicationPkcs7Mime; } if (p7m != null && p7m.SecureMimeType == SecureMimeType.SignedData) { p7m.Verify(out MimeEntity original); // THE REAL DECRYPTED DATA using (MemoryStream dump = new MemoryStream()) { original.WriteTo(dump); decrypted = dump.GetBuffer(); } }

推荐答案

由于在EncryptedData上调用Verify(),因此您收到了InvalidOperationException.

You are getting an InvalidOperationException because you are calling Verify() on a EncryptedData.

您需要调用Decrypt().

You need to call Decrypt().

Verify()用于SignedData.

Verify() is for SignedData.

更多推荐

无法使用MimeKit解密p7m

本文发布于:2023-11-17 17:15:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1610423.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:MimeKit   p7m

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!