使用散列字节的不同输出



我有一个简单的表用于测试HASH PASSWORDS
我有2列PWD&HASHED_PWD。假设在PWD中,我在HASHED_PWD中有密码"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';

结果是:

칮핏섛鐓鈦絣䮝ຆ

但当我使用变量散列"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'

我发现问题:
对于PWDHASHED_PWD列,我必须使用VARBINARY数据类型。
以及我的变量@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'

结果为CCD_ 8。

相关内容

  • 没有找到相关文章

最新更新