gpt4 book ai didi

c# - S/Mime 加密字符串

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:49 24 4
gpt4 key购买 nike

我的任务是使用 S/Mime 加密来加密字符串。很久以前,我工作的公司为此购买了一个组件(来自 IPWorks),但为了让他们的组件在我们的服务器上很好地运行,我们经历了无数的悲伤。不是功能问题,更多许可。

所以总之,我必须自己动手。我已经搜索了 MSDN 和论坛并整理了以下代码。不幸的是,它创建的输出不是我所期望的。很多我没想到的韩语和特殊字符。

public string EncryptString(string toEncrypt, string key)
{
// Convert the body to bytes
byte[] bodyBytes = Encoding.ASCII.GetBytes(toEncrypt);

// Encrypt the body
var envelopedCms = new EnvelopedCms(new ContentInfo(bodyBytes));

var certificate = new X509Certificate2(Encoding.ASCII.GetBytes(key));

var recipient = new CmsRecipient(certificate);
envelopedCms.Encrypt(recipient);
byte[] encryptedBytes = envelopedCms.Encode();
var msg = new MailMessage();
var ms = new MemoryStream(encryptedBytes);
var av = new AlternateView(ms, "application/pkcs7-mime; smime-type=enveloped-data;name=smime.p7m; content-transfer-encoding=Base64; content-disposition=attachment; fileName=smime.p7m;");
msg.AlternateViews.Add(av);

return new StreamReader(msg.AlternateViews[0].ContentStream).ReadToEnd();
}

谁能看出这里有明显的错误?

我并没有“嫁给”这个代码,所以如果你对我如何做到这一点有其他建议,请开除。

感谢,

最佳答案

这一行是问题所在:

var av = new AlternateView(ms, "application/pkcs7-mime; smime-type=enveloped-data;name=smime.p7m; content-transfer-encoding=Base64; content-disposition=attachment; fileName=smime.p7m;");

您正在将多个 header 的值转储到 Content-Type header 中。

相反,您想要的是更像这样的东西:

var contentType = new ContentType ("application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m");
var attachment = new Attachment (ms, contentType);
attachment.ContentDisposition.FileName = "smime.p7m";
attachment.TransferEncoding = TransferEncoding.Base64;

也就是说,我正在开发一个比 System.Net.Mail 好得多的 MIME 库。这个库叫做 MimeKit我已经开始致力于 S/MIME 支持。

关于c# - S/Mime 加密字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1465638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com