2015-09-13 28 views
8

Win10で実行するC#プログラムをビルドします。ボタンを押すだけで、このプログラム(計算結果)から電子メールを送信したいと思います。私はfrom:電子メールアドレスと件名:などをC#のプロパティに入れますが、プログラムのどこにでもクリアテキストのパスワードを入れたくないので、パスワードを入力する必要はありませんメールが送信されるたびにサーバーのために。C#を使用してWindowsで資格情報を格納および取得する方法

できますか?

もしそうなら、どのように(一般的に)?

私は、プログラムの起動時に読み込まれるデータファイルに、サーバー用の暗号化されたパスワードを含め、すべての電子メール情報を入れることを考えていました。

それともWin10は、そのための設備があり...

答えて

14

は、Windows資格情報管理APIを使用することができます。この方法では、ユーザーにパスワードを1回だけ要求してから、Windows資格情報マネージャにパスワードを保存します。次回にアプリケーションが起動し、パスワードを使用する必要がある場合、Windows Credentials Managerからパスワードを読み取ります。あなたはpinvoke(credwriteCredReadexample here)を使用してWindows Credential Management APIを直接使用することも、使いやすいC#ラッパーを使用したい場合はCredentialManagementをチェックすることもできます。

使用例:

public class PasswordRepository 
{ 
    private const string PasswordName = "ServerPassword"; 

    public void SavePassword(string password) 
    { 
     using (var cred = new Credential()) 
     { 
      cred.Password = password; 
      cred.Target = PasswordName; 
      cred.Type = CredentialType.Generic; 
      cred.PersistanceType = PersistanceType.LocalComputer; 
      cred.Save(); 
     } 
    } 

    public string GetPassword() 
    { 
     using (var cred = new Credential()) 
     { 
      cred.Target = PasswordName; 
      cred.Load(); 
      return cred.Password; 
     } 
    } 
} 

私はあなたがおそらく良いアイデアではありません、アプリケーションコードで復号鍵を埋め込みますパスワードを暗号化しても、クライアント・マシン上のファイルにパスワードを保存することはお勧めしません。

+0

ありがとうございます。クリア – Erik

関連する問題