8

パスワードハッシュをデータベースに保存します。基本的に、MD5ハッシュ(バイトの配列)を取得してから、バイト配列に対してEncoding.Unicode.GetCharsを実行し、その結果の文字列をデータベースに格納します。次に、誰かがログインすると、同じ方法でパスワードをハッシュし、2つの文字列を比較します。

これは、T-SQLでパスワードハッシュを抽出して別の行に挿入できないことを除いて、うまく機能します。それを機能させる唯一の方法は、有効なハッシュを持つ別の行の選択から直接パスワードハッシュを実際に設定する場合です。

文字列を16進数に変換し、SQLに変換させようとしましたが、それも機能しません。UNICODEとしてエンコードするバイトは、おそらく有効なUNICODE文字列を構成していないためだと思います。

したがって、たとえば(SQL Server:文字列を16進文字列に変換して戻す):

次のコマンドを実行すると、「ヘルプ」という単語がvar binaryに変換されてから、文字列に戻されます。再び「ヘルプ」が表示されます。

SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), 'Help'))

問題は、パスワードハッシュ列でそれを実行すると、結果の値が列に格納されている値と同じにならないことです。ハッシュを含む文字列をSQLManagementStudioの2つの'記号の間に貼り付けると、'を飛び越えて、他の文字が挿入されます。繰り返しになりますが、probalbyは、適切なUNICODE文字列ではないため、不完全なUNICODEシーケンスを相互に処理しようとします。

したがって、私が探しているのは、パスワードハッシュを含むVARCHAR(64)のバイトを取得し、それを次のようなエンコードテキスト形式に書き込む方法です。

0x0F037584C99E7FD4F4F8C59550F8F507

それで私は次のようなことをすることができます

UPDATE   [User]
SET      PasswordHash = CONVERT(NVARCHAR(64), 0x0F037584C99E7FD4F4F8C59550F8F507)
WHERE    UserID = 123

何か案は?

4

2 に答える 2

5

DUH!それを見つけた。投稿を読み直していると、私の例ではNVARCHARではなくVARCHARへの変換を使用していることに気付きました。NVARCHARに変更すると、すべてが機能し始めました。

于 2012-07-12T12:40:42.007 に答える
0

あなたが使用することができます

   select CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX),FileBytes)) 

   FileBytes=0x3C3F786D6C207665
于 2016-05-10T09:55:24.087 に答える