2009-07-31 1 views
8

私はコードの一部を昇格した特権で実行する必要があります。コードにパスワードを入れようとする方法

偽装を設定するコードはありますが、ユーザー名、ドメイン、パスワードが必要です。私のコードはC#.netにありますので、十分に決められた誰かがパスワードを見つけることができます。

私のコードでパスワードを暗号化する方法はありますか?そうでなければ、このパスワードを安全にしてもそれを渡すことができますか?

using (new Impersonator("UserNameGoesHere", "DomainNameGoesGere", "Password Goes Here")) 
{ 
    uint output; 
    NetUserAdd(AUTHENTICATION_SERVER, 1, ref userinfo, out output); 
    return output; 
} 

私はプレーンテキストでパスワードを表示しないようにこの問題を解決する方法を示す例が大好きだ。ここでは

は、私が呼び出していたコードです。

私は、Visual Studio 2008、.NET 3.5 SP1を使用して、そして2003年

+0

ありがとうございました!私はそれらを試して、最も効果的なものを選ぶつもりです。再度、感謝します! – Vaccano

答えて

6

はあなたがCryptoAPIs使用できるWindows Server上で実行されているのですか?私はあなたが達成しようとしている何のためのデータ保護API(DPAPI)を調査し推薦する

How to store passwords in Winforms application?

4

Vaccano、

:受け入れ答えを参照してください。これは、アプリケーションに必要なパスワードを可逆的に格納するためのベストプラクティスの多くのアプローチにおいて、ソリューションの一部と考えられています。

DPAPI(および他の技術+懸念)を議論良い記事はここに見つけることができる:

http://msdn.microsoft.com/en-us/magazine/cc164054.aspx

C#2.0、P /呼び出しがあっても必要とされないと、管理ラッパーが存在します

http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=41ca5a99-ddc0-4d0a-9919-2ce10bf50c7e

私はこれが役に立てば幸い!

+1

Jon Gallowayにはこれを実装するいくつかの例があります... http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspx – MyItchyChin

4

あなたはここに複数のオプションを持っています。

  1. 初めてパスワードをハッシュしてファイルに保存することができます。次回は、権限を昇格してコードを実行したい場合は、パスワードを受け入れ/再入力し、ハッシュを再計算し、保存したハッシュと照合する必要があります。一致した場合にのみ、標高モードでコードを実行します。 SHAを使用してハッシュすることができます。ハッシュの例については、System.Crytography名前空間を参照してください。

  2. 第2のオプションは、AESなどのアルゴリズムを使用してパスワードを暗号化することです。ただし、これを行うにはキーが必要です。このキーを確保することを心配する必要があります。

  3. 第3のオプションは、DPAPIを使用してパスワードを暗号化することですが、キーの安全性については心配する必要はありません.2よりはるかに簡単です。

アプリケーションを起動するたびにパスワードを再入力しても構いません。それが可能でない場合は、3と一緒にDPAPIを使用することをお勧めします。

ここから始めるにはいくつかのリンクがあります。あなたはsafe-config nugetパッケージを使用することができます

1. http://www.obviex.com/samples/dpapi.aspx 2. http://www.obviex.com/samples/Encryption.aspx

+0

パスワードをハッシュするための提案は、虹を取ることができませんテーブル攻撃を考慮する。パスワードは、ハッシュされる前に「塩漬け」されていなければなりません。 http://www.codinghorror.com/blog/archives/000949.htmlを参照してください。 –

2

。内部的には、データ保護APIを使用してデータの暗号化と復号化を行います。

//Save some configuration data at folder data\temp\ 
var configManager = new ConfigManager() 
    .WithOptions(DataProtectionScope.CurrentUser) 
    .Set("password", "my-massword") 
    .AtFolder(@"data\temp\") 
    .Save(); 

    ... 

//Load configuration data 
var loadedValue = new ConfigManager() 
    .AtFolder(@"data\temp\") 
    .Load() 
    .Get<string>("password"); 
関連する問題