我的任務是使用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