ハッシュ化されたパスワードとソルト (ユーザー名) を使用しています。
問題は、c# のハッシュ値が、TSQL スクリプトによってデータベースに追加した初期値と等しくないことです。
TSQL:
UPDATE [Users]
SET Password = HASHBYTES('SHA2_256', 'test123'+UPPER([UserName]))
GO;
C#:
var passBytes = new UnicodeEncoding().GetBytes(pass);
var saltBytes = new UnicodeEncoding().GetBytes(userName.ToUpper());
var dataToHash = new byte[passBytes.Length + saltBytes.Length];
Array.Copy(passBytes, dataToHash, passBytes.Length);
Array.Copy(saltBytes, dataToHash, saltBytes.Length);
var sha = new SHA256Managed();
return sha.ComputeHash(dataToHash);
エンコーディングと関係があると思います。しかし、これを修正する方法がわかりません。
ユーザー名は varchar(50) です
DB は既存のものであるため、varchar の変更はそれほど簡単ではありません。
私はすでに試しました:
UPDATE [Users]
SET Password = HASHBYTES('SHA2_256', N'test123'+UPPER([UserName]))
GO;