4

SQL Server ストアド プロシージャでのアカウントの検証に問題があります。私がしていることは、ユーザーのパスワードをハッシュバイトすることです。彼が自分のアカウントにログインしたい場合、私は再びパラメーター ( @fPassword) をハッシュバイトし、それをデータベースにあるハッシュバイト パスワードと比較します。問題は、私が別の値を取得し続けることです。

例えば:

declare @fPassword nvarchar(4000)
set @fPassword = 'sharingan1'
IF (CONVERT(NVARCHAR(4000), HASHBYTES('sha1', @fPassword), 1)) <> (select fPassword from CustomerTable WHERE fUserName = 'cesark14')
BEGIN 
    print 'b'
END
else
    print 'c'

私は取得し続け'b'ます。しかし、@fPasswordforを置き換えると'sharingan1''c'(これが私が欲しいものです) になります。

誰もが理由を知っていますか

(CONVERT(NVARCHAR(4000), HASHBYTES('sha1', @fPassword), 1)) 

私が設定した@fPassword = 'sharingan1'場所

(CONVERT(NVARCHAR(4000), HASHBYTES('sha1', 'sharingan1'), 1))
4

1 に答える 1

5

変数 @fPassword は NVARCHAR です。文字列をハードコーディングすると、タイプは VARCHAR になります。"N'sharingan1'" のように、文字列の前に 'N' を付けると、文字列が NVARCHAR として表現されるため、これらは同等になります。または、変数を VARCHAR 型にすることもできます。

エンコーディングが重要です。

于 2013-08-10T01:09:14.427 に答える