2012-09-10 45 views
3

我正在爲我兄弟的公司建立一個網站。網站上最重要的元素是郵件功能。訪問者可以使用該系統向我的兄弟發送電子郵件,這一點很重要。所以我用這個代碼:如何在代碼中保護密碼c#電子郵件客戶端

message.From = new MailAddress("[email protected]"); 
message.To.Add(new MailAddress("emailaddress")); 
message.CC.Add(new MailAddress("emailaddress")); 
SmtpClient client = new SmtpClient("smtp.live.com", 587); 
client.EnableSsl = true; 
client.Credentials = new System.Net.NetworkCredential("emailaddress","password"); 
client.Send(message); 

該代碼工作正常,但有一個問題:我需要填寫我的密碼,我不想這樣做。有沒有辦法使用像MD5散列(或其他類型的加密)或其他東西來保護我的密碼?

回答

6

SMTP(協議底層電子郵件)要求以純文本形式提供密碼。

您已經確保了通訊渠道的安全,該通訊渠道應該能夠防止電話上的電子郵件密碼被攔截。

您可以將密碼本身放入encrypted element of web.config以保護它靜止。

最後,考慮一個帳戶使用只有爲此目的。將該帳戶的電子郵件轉發給您兄弟的帳戶。如果密碼被盜用,請刪除該帳戶並創建一個新的轉發帳戶。爲System.Net SMTP電子郵件對象

+0

感謝您提供這些信息,而且我已經考慮過使用僅用於向我的兄弟發送電子郵件的帳戶。 – Max

+0

@EricJ .NET 4版的['NetworkCredential'](http://msdn.microsoft.com/en-us/library/dd783746%28v=vs.100%29.aspx)有一個構造函數, SecureString'](http://msdn.microsoft.com/en-us/library/system.security.securestring%28v=vs.100%29.aspx)的密碼 - 你是說這不能用於SMTPClient是否需要純文本密碼? (我沒有嘗試過,我只是感興趣) – Bridge

+1

@Bridge:NetworkCredential適用於「基於密碼的身份驗證方案(如基本,摘要,NTLM和Kerberos)中的證書」。我不確定它是否適用於SMTPClient,但在一天結束時,純文本將覆蓋(希望是SSS保護的)連線,就像純文本最終會通過網絡進行基本Web認證一樣(我知道NetworkCredential支持)。 SecureString提供了額外的好處,即字符串在使用後不會留在系統內存中,而是被主動覆蓋。如果服務器被黑客攻擊,這可以幫助最大限度地減少暴露。 –

相關問題