私は現在、私のデータベースに暗号化されたテキストを格納するため、以下のハッシュアルゴリズムを採用しています:ユーザーは暗号化する必要が何を入力するたびに保存パスワード
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にパスワードを送ることができますか?理想的には、自分自身でパスワードを取得できないという部分については、私は維持したいと考えています。
ハッシュは暗号化と同じではありません。暗号化を解除することはできますが、何かを解き放つことはできません。ハッシングは不可逆的です。さらに、実際のログインとパスワードをその関数に渡す必要がある場合は、その関数を持つ必要があります。実際の暗号化されていないパスワードを持っていない場合は使用できません。 – GolezTrol
私は自分のデータベースにユーザー名とパスワードを格納する方法はありません。私はこれらのユーザー名とパスワードを使って電子メールを送信するためのNetworkCredentialsを作成することができますが、同時にどういうわけか自分のデータベースにアクセスできる人は誰ですか? –
データベースのパスワードを実際に*暗号化する*ことができます。解読に必要なパスワードは、別の場所に保存することができます。データベースに侵入する人は、「マスター」パスワードなしでこれらの暗号化されたパスワードを使用できないため、余分な安全対策です。しかし、このコメントに含めることができるよりもパスワードの保存にはもう少しの余裕があります。したがって、少なくとも「塩」と「サイクリング」について何か言及している適切な本や記事を入手してください。 – GolezTrol