我有一个简单的表格来测试HASH PASSWORDS
我有2列PWD& hashed_pwd的。让我们在PWD中说我有密码' 111'在HASHED_PWD中,我使用此查询添加哈希密码' 111':
declare @hashThis nvarchar(150);
select @hashThis = CONVERT(nvarchar(150),(SELECT PWD FROM Customers where CustomerID='cust-111'));
update Customers set HASHED_PWD=HASHBYTES('md5',@hashThis) where CustomerID='cust-111';
结果如下:
칮핏섛鐓鈦絣䮝ຆ
但是当我使用变量哈希' 111':
declare @hashThis nvarchar(150);
select @hashThis = CONVERT(nvarchar(150),(SELECT PWD FROM Customers where CustomerID='cust-111'));
--update Customers set HASHED_PWD=HASHBYTES('md5',@hashThis) where CustomerID='cust-111';
select HASHBYTES('md5',@hashThis) as HASHES;
相同的查询但结果不同。我的变量@hashThis
是:
0x6ECE4FD51BC113942692637D9D4B860E
我的列数据类型和变量是相同的nvarchar(150)
为什么我会有不同的结果?
任何想法?
我使用此查询进行比较,结果始终不正确
declare @pwd nvarchar(150);
declare @pwd2 nvarchar(150);
set @pwd=HASHBYTES('md5','111');
set @pwd2=(select HASHED_PWD from Customers where CustomerID='cust-111')
if @pwd=@pwd2
print 'Correct'
else
print 'not correct'
答案 0 :(得分:0)
我发现了这个问题:
我必须对VARBINARY
和PWD
列使用HASHED_PWD
数据类型。
和我的变量@hashThis
也是如此
这就是我做的。我转换了两列的数据类型:
alter table Customers alter column PWD VARBinary(150)
alter table Customers alter column HashED_PWD VARBinary(150)
然后我使用一个变量来使用相同的密码进行测试,如下所示:
DECLARE @hashThis nvarchar(50);
select @hashThis ='111';
select @hashThis= CONVERT (varbinary(150),@hashThis);
set @hashThis= HASHBYTES('md5',@hashThis);
if @hashThis=(select HASHED_PWD from Customers WHERE CustomerID='cust-111')
print 'Correct'
else
print 'not Correct'
,结果为Correct
。