1

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();

さらに情報が必要な場合は、お知らせください。正確なアルゴリズムやその結果について、ここであまり説明したくありません。

ありがとうございました。

4

1 に答える 1

2

Convert.ToBase64String()代わりに、バイト配列を文字列にエンコードするために使用してみてください 。これで問題が解決するはずです。

于 2013-08-16T18:52:46.427 に答える