C# でいくつかの暗号化タスクを実行していて、よくわからない問題に遭遇しました。ユーザーのパスワードに非常に複雑なソルト付きハッシュ文字列が表示されることがありますが、これらの文字列が何らかの理由でデータベースに正しく保存されていません。
RNGCryptoServiceProvider
クラスからランダムに生成された 8 バイトのソルトを使用しています。SHA256Managed
クラスを my として使用していHashAlgorithm
ます。ASCIIEncoding.Default.GetString()
メソッドを介して作成されたバイトから格納する文字列を取得しています。これらの値が格納されている列の型は(NVARCHAR(50), NULL)
です。SqlCommand
クラスを使用してそれらを保存しています。
コードをステップ実行してイミディエイト ウィンドウを使用すると、正確な文字列が正しく表示されます。に電話すると問題が発生しているようcmd.ExecuteNonQuery()
です。以下とは別の方法で行う必要がありますか?
string query = @"UPDATE User SET password = @password WHERE id = @userID";
cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("@password", encryptedPassword);
cmd.Parameters.AddWithValue("@userID", userID);
int rowsAffected = cmd.ExecuteNonQuery();
さらに情報が必要な場合は、お知らせください。正確なアルゴリズムやその結果について、ここであまり説明したくありません。
ありがとうございました。