たぶん私は正しいパラメータをグーグルで検索していないだけかもしれませんが、これを理解できないようです。
私の理解では、バイト配列である必要があるハッシュ化されたパスワードを作成しました。次に、それを SqlDataSource に挿入する必要があります。そこに問題があります。
私のデータベース定義は次のとおりです。
**列** || **データ・タイプ** ---------------------------- 名前 || varchar(50) ユーザー名 || varchar(50) || ハッシュされたPwd || varbinary(50) || ソルト varbinary(50) ユーザータイプ || varchar(50)
私のコードは次のとおりです。
HashAlgorithm hashing = new SHA256Managed();
byte[] passwordPlainText = (new System.Text.ASCIIEncoding()).GetBytes(txtPassword.ToString());
byte[] salt = (new System.Text.ASCIIEncoding()).GetBytes(RNGCryptoServiceProvider.Create().ToString());
// Combine salt and password before hashing.
byte[] saltAndPwd = new byte[passwordPlainText.Length + salt.Length];
Array.Copy(passwordPlainText, saltAndPwd, passwordPlainText.Length);
Array.Copy(salt, 0, saltAndPwd, passwordPlainText.Length, salt.Length);
byte[] hashedPwd = hashing.ComputeHash(saltAndPwd);
database.InsertCommandType = SqlDataSourceCommandType.Text;
database.InsertCommand = "INSERT INTO userlist (Name, Username, HashedPwd, Salt, Type) VALUES (@insName, @insUsername, @insHashedPass, @insSalt, @insType);";
database.InsertParameters.Add("insName", txtName.Text);
database.InsertParameters.Add("insUsername", txtUsername.Text);
database.InsertParameters.Add("insHashedPass", (new System.Text.ASCIIEncoding()).GetString(hashedPwd));
database.InsertParameters.Add("insSalt", (new System.Text.ASCIIEncoding()).GetString(salt));
database.InsertParameters.Add("insType", txtType.Text);
database.Insert();
データベースに関するものは、インターネットでの調査と、Visual Studio の便利なオートコンプリート機能でどのようなオプションが提供されているかを調べて収集したものです。
参考までに、Visual Studio 2010 バージョン 10.0.4、.Net バージョン 4.0.3
を使用しています。SQL 接続用の外部ライブラリがいくつかあるようですが、.Net が提供する組み込みのものを使用することをお勧めします。
現在、挿入アルゴリズムを実行するとこのエラーが発生します。
データ型 nvarchar から varbinary への暗黙的な変換は許可されていません。CONVERT 関数を使用して、このクエリを実行します。
convert 関数の使い方がわかりません。
Add() メソッドは、現在行っているように文字列、文字列を取ることができます。また、文字列、DbType、文字列を取ることもできます。試してみましdatabase.InsertParameters.Add("insSalt", DbType.Binary, salt);
たが、Web サイトをコンパイル/ビルドすることさえできません。わかります。「バイト[]から文字列に変換できません」。
に変更すると、次のようsalt.ToString()
になります。Insert() 行の「パラメータ値を文字列から Btye[] に変換できませんでした」。
そうですね...本当に迷子になりました。どんな助けでも大歓迎です。