我遇到了SQL Server函数HashBytes
的一个奇怪问题。
我的Password
表(Users
)中有一列nvarchar(32), not null
。
用户的密码为123456
,在MD5中为e10adc3949ba59abbe56e057f20f883e
,此值存储在列中。
我正在尝试获取e10adc3949ba59abbe56e057f20f883e
的MD5哈希函数,实际上是14e1b600b1fd579f47433b88e8d85291
(您可以检查它here),但是在我的SQL Server查询中,我得到了另一个结果:
SELECT TOP 1
Password,
lower(convert(nvarchar(32), HashBytes('MD5', '123456'), 2)) AS md5pass1,
lower(convert(nvarchar(32), HashBytes('MD5', 'e10adc3949ba59abbe56e057f20f883e'), 2)) AS md5pass2,
lower(convert(nvarchar(32), HashBytes('MD5', Password), 2)) AS md5pass3
FROM Users
结果是:
我希望得到' 14e1b600b1fd579f47433b88e8d85291'结果......
感谢你帮助我!
答案 0 :(得分:4)
你不能哈希文本,你只能哈希字节。 HashBytes
首先将输入字符串转换为字节。转换取决于数据类型是否为Unicode类型。我想Password
是nvarchar
,我发现你的文字是varchar
。
决定你想要哪一个并持续使用它。
答案 1 :(得分:0)
根本原因是您使用的nvarchar是unicode。转换为非unicode varchar后,获取正确的结果。由于它的密码,为什么不直接使用varchar。