我正在使用带有盐(用户名)的散列密码。
问题是 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)
数据库是现有数据库,因此更改 varchar 不会那么容易。
我已经尝试过:
UPDATE [Users]
SET Password = HASHBYTES('SHA2_256', N'test123'+UPPER([UserName]))
GO;