首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用hashbytes的不同输出

使用hashbytes的不同输出
EN

Stack Overflow用户
提问于 2014-05-02 21:48:27
回答 1查看 204关注 0票数 0

我有一个简单的表来测试HASH PASSWORDS

我有2列PWD和HASHED_PWD。假设在PWD中,我在HASHED_PWD中有密码'111‘,我使用以下查询添加了散列密码'111':

代码语言:javascript
复制
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';

结果是这样的:

代码语言:javascript
复制
칮핏섛鐓鈦絣䮝ຆ

但是当我使用变量散列‘111’时:

代码语言:javascript
复制
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是:

代码语言:javascript
复制
0x6ECE4FD51BC113942692637D9D4B860E

我的列数据类型和变量是相同的nvarchar(150)

为什么我会有不同的结果?

有什么想法吗?

我使用这个查询进行比较,结果总是不正确

代码语言:javascript
复制
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'
EN

回答 1

Stack Overflow用户

发布于 2014-05-03 02:32:31

我找到了问题所在:

我必须对PWDHASHED_PWD列使用VARBINARY数据类型。

我的变量@hashThis也是如此

这就是我所做的。我转换了这两列的数据类型:

代码语言:javascript
复制
alter table Customers alter column PWD VARBinary(150)
alter table Customers alter column HashED_PWD VARBinary(150)

然后我使用一个变量来使用相同的密码进行测试,如下所示:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23429767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档