2012-04-10 18 views
8

コード内に機密パスワードを保存する必要があります。パスワード自体が必要なので、私はハッシング技術を使うことができません。これらのデータをapp.configファイル内に安全に保存するにはどうすればよいですか?app.configファイルはパスワードを保存するための安全な場所ですか?

これを他の方法で安全に行うことはできますか?

DPAPIとProtectDataクラスは、キーがシステム固有のものであるため、オプションではありません。たとえば、エンドユーザーシステムごとに接続文字列をこのように格納することはできません。

+6

どのように「必要なのパスワードは? _that_バグを排除する方が現実的かもしれません。 –

+2

代わりにハッシュを保存できないのはなぜですか?パスワードはどのように使用されますか? –

+2

私はグッドアイデア、Googleの暗号化設定... http://msdn.microsoft.com/en-us/library/ie/dtkwfdky.aspx – Lloyd

答えて

7

DPAPI(データ保護API)を使用して、設定ファイルの特定のセクションを暗号化することができます。あなたのコードはまだConfigurationManagerを使用しており、解読はフレームワークによって注意を払われます。同じの詳細については、このパターンとプラクティス文書How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI

は、暗号化したり、コードからの情報を復号化するための更新を参照してください、あなたはProtectedData.Protect & ProtectedData.Unprotectを使用することができます。これは、インストーラのカスタムアクションの一部として、またはアプリケーションを使用するときにユーザーが資格情報を入力したときに実行できます。

サンプルコード

class SecureStringManager 
{ 
    readonly Encoding _encoding = Encoding.Unicode; 

    public string Unprotect(string encryptedString) 
    { 
     byte[] protectedData = Convert.FromBase64String(encryptedString); 
     byte[] unprotectedData = ProtectedData.Unprotect(protectedData, 
      null, DataProtectionScope.CurrentUser); 

     return _encoding.GetString(unprotectedData); 
    } 

    public string Protect(string unprotectedString) 
    { 
     byte[] unprotectedData = _encoding.GetBytes(unprotectedString); 
     byte[] protectedData = ProtectedData.Protect(unprotectedData, 
      null, DataProtectionScope.CurrentUser); 

     return Convert.ToBase64String(protectedData); 
    } 
}  
+0

間違っています。 Web.configファイルの場合DPAPIのキーはシステム固有のため、異なるエンドユーザーの異なるシステムでは正しい解読ができません – techno

+1

@technoインストール中に必要な作業を行うカスタムインストーラアクションを実行する必要があります。詳細は初めて。サンプルコードで私の答えを更新しました。 – Ramesh

+0

これは接続文字列では不可能です。 – techno

関連する問題