我的任务是使用S/Mime加密来加密字符串。以前,我工作的公司为此购买了一个组件(来自IPWorks),但是我们有许多令人悲伤的事情让他们的组件在我们的服务器上很好地发挥作用。不是一个功能问题,更多的许可。S/Mime加密字符串
所以总之,我必须自己做。我已经浏览了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();
}
任何人都可以在这里看到明显的错误吗?
我不是这个代码的“结婚”,所以如果你有一个替代的建议,我可以做这个消防。
善良和感谢,
丹
不要向X509构造函数传递byte []尝试将byte []解析为X509证书,是'key'实际上是一个证书,还是试图使用任意字符串进行加密?不知道这是否可以帮助:http://msdn.microsoft.com/en-us/library/ms180959.aspx – Lazarus 2009-09-23 12:31:37
谢谢拉兹,但是,它是一个证书读入一个字符串 – 2009-09-23 12:33:21
我想另一个问题是,你能解码你的编码程序的输出? – Lazarus 2009-09-23 12:39:28