2011-07-03 7 views
3

私は管理者アカウントを設計したC#.NETアプリケーションを作成しています。今、そのアカウントでログインするには、管理者はパスワードを入力する必要があります。C#.NETでパスワードを保存するには?

私の質問は:どのように私はそのパスワードを保存しますか?

可能なオプションは:

  1. グローバル変数の実現可能な

  2. データベースリレーション((それはデフォルト値のたびにリセットされます明らかに間違ったので、私は、アプリケーションを実行する)が、それはスカラでするのに役立ちます関係のみ....)

私は1つのeの関係を使うのは馬鹿だと思うのでスカラー関係で保存したくありませんntryと1つの列!

パスワードを保存する他の最適な方法はありますか?

+0

管理者がログインする必要があるとき、私は彼にパスワードを尋ねます。正しいパスワードを(何らかの形で)保存します。次に、2つのパスワードが一致するかどうかを確認します。はいの場合、管理者は自分のアカウントにアクセスできます。そうでない場合、エラー。それは私たちのFacebook(または他の)アカウントにログインするのに似ています。 – killerCoder

+0

まず、なぜ(1)の理由が説明されているのですか?第二に、**パスワードを保存しないでください!**完全停止。 –

答えて

8

あなたはそれを塩漬けし、ハッシュしてユーザー設定ファイルに保存することができます。

次のようなものを使用して、デフォルトの設定ファイルにアクセスすることができます。

private bool CheckPassword(string salt, string password) 
{ 
    var hash = Encoding.ASCII.GetBytes(salt + password); 
    var sha1 = new SHA1CryptoServiceProvider(); 
    var sha1hash = sha1.ComputeHash(hash); 
    var hashedPassword = ASCIIEncoding.GetString(sha1hash); 

    return (Properties.Settings.Default.adminPass == hashedPassword); 
} 
+0

あなたのお手伝いをしてくださった皆さん、ありがとうございました。あなたのような経験を積んだ人からアドバイスやトリックを受けるのは非常に素晴らしく、暖かいものです。 – killerCoder

5

セキュリティ上の理由から、hashのパスワードのみを保存し、平文パスワードは保存しないことをおすすめします。ファイルレジストリ、データベース、...

3

あなたはすでにシステム内のデータベースを持っていますか?それからちょうどそこに置いてください。あなたはおそらくパスワードに対応するために拡張することができるusersテーブルを持っています(?)そうでなければ、ファイルに格納することができます。

本当に重要なことは、パスワードをプレーンテキストで保存しないことです。それは悪いセキュリティ実践です。 SHA512などの良好なハッシュアルゴリズムを使用して、好ましくは塩を使用して一方向ハッシュを行う必要があります。

3

これは、サーバーにユーザーの資格情報を保持すると仮定します。データベースのパスワードのハッシュを格納します。理想的には、SALT + sha1(SALT + password)のようなものを計算して保存する必要があります。ここで、SALTは、格納されている各パスワードごとに計算されるランダムな文字列です。誰もがに平文パスワードを格納していないについて言ってきた、あなたは文字列に平文パスワードを使用して、仕事(例えば、テキストボックスから値を取得するとき)はならないものに加えて

1

これは、文字列が未知の制御されていない時間の間、メモリ内に残る可能性があるためです。

SecureStringを使用して保存する必要があります。説明のように

:プログラムでガベージコレクションのためにスケジュールすることができません

System.Stringクラスのインスタンスは、不要になったときに、不変と両方あります。つまり、インスタンスは作成後に読み取り専用になり、インスタンスがいつコンピュータのメモリから削除されるかを予測することはできません。したがって、Stringオブジェクトにパスワード、クレジットカード番号、個人データなどの機密情報が含まれていると、アプリケーションがコンピュータのメモリからデータを削除できないため、情報を使用した後に情報が漏洩する危険性があります。

+1

真実の間に、SecureString値を読み取ることができる分析ツールがあります無意味なことです)、もしあなたのマシンがメモリデバッグツールが問題になってしまうような状態になってしまったら、あなたは既に***に陥っています。 –

関連する問題