2017-11-02 9 views
1

私は現在、私のデータベースに暗号化されたテキストを格納するため、以下のハッシュアルゴリズムを採用しています:ユーザーは暗号化する必要が何を入力するたびに保存パスワード

public static string HashString(string inputString, string hashName) 
{ 
    HashAlgorithm algorithm = HashAlgorithm.Create(hashName); 
    byte[] hash = algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString)); 
    return Convert.ToBase64String(hash); 
} 

は基本的に、私が最初にこの関数を呼び出します結果をデータベースに格納します。

私は今までパスワードを保存していたので、これまでのところうまくいきました。コンテンツを実際に出力する必要はありません。ユーザーはログインするたびに、入力したパスワードを取得し、上記の関数を使用して暗号化し、暗号化されたパスワードとデータベースに格納されている値を比較します。

私が今直面している問題は、特定のケースでは、私はを実行するは、非ハッシュコンテンツを取得する必要があります。基本的に、私は、クライアントが自分のSMTP送信アカウントのユーザー名とパスワードを保存できるようにしたい、と私は、次の使用して、その後、資格を作成できるようにする必要があります:コンテンツがに保存されているので

System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(login, pass) 

私データベースがHashStringメソッドを使用して暗号化されている場合、どのようにして私のSmtpClientで使用するためにNetworkCredentialにパスワードを送ることができますか?理想的には、自分自身でパスワードを取得できないという部分については、私は維持したいと考えています。

+5

ハッシュは暗号化と同じではありません。暗号化を解除することはできますが、何かを解き放つことはできません。ハッシングは不可逆的です。さらに、実際のログインとパスワードをその関数に渡す必要がある場合は、その関数を持つ必要があります。実際の暗号化されていないパスワードを持っていない場合は使用できません。 – GolezTrol

+0

私は自分のデータベースにユーザー名とパスワードを格納する方法はありません。私はこれらのユーザー名とパスワードを使って電子メールを送信するためのNetworkCredentialsを作成することができますが、同時にどういうわけか自分のデータベースにアクセスできる人は誰ですか? –

+1

データベースのパスワードを実際に*暗号化する*ことができます。解読に必要なパスワードは、別の場所に保存することができます。データベースに侵入する人は、「マスター」パスワードなしでこれらの暗号化されたパスワードを使用できないため、余分な安全対策です。しかし、このコメントに含めることができるよりもパスワードの保存にはもう少しの余裕があります。したがって、少なくとも「塩」と「サイクリング」について何か言及している適切な本や記事を入手してください。 – GolezTrol

答えて

0

これ以上のことを読んだ後、私の質問は実際にはうまく策定されていないことに気付きました。私はこれを答えたとマークし、@ GolezTrolのコメントをアップヴォート

ハッシュは暗号化と同じではありません。暗号化を解除することはできますが、何かを解き放つことはできません。ハッシングは不可逆的です。さらに、実際のログインとパスワードをその関数に渡す必要がある場合は、その関数を持つ必要があります。実際の暗号化されていないパスワードを持っていない場合は使用できません。

正しい方向に私を助けてくれたからです。私はFundamental difference between Hashing and Encryption algorithmsが私がやっているべきことにもっと近づくのを手助けするのに役立つ参考資料であることがわかりました。

+1

コメントは一時的なものとみなされるので、答えに@ GolezTrolのコメントを簡単に書き直すことをお勧めします。 – Blorgbeard

+0

詳細情報:パスワードを暗号化しないでください。攻撃者が暗号化されたパスワードを取得すると、暗号化キーも取得されます。ハッシュ関数を使うだけでは不十分で、単に塩を追加するだけでセキュリティを向上させることはほとんどありません。約100msの間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存します。 'ehash'、' PBKDF2'、 'Rfc2898DeriveBytes'、' Bcrypt'、 'passlib.hash'などの関数を使用してください。要点は、攻撃者が無差別にパスワードを見つけるのにかなりの時間を費やすようにすることです。 – zaph

+0

@zaphここでの問題は、第三者のシステムに代わって認証するために、OPが平文パスワードにアクセスする必要があることです。 – Blorgbeard

関連する問題