【发布时间】:2014-06-28 19:11:25
【问题描述】:
我遇到了一个关于 SQL Server 函数 HashBytes 的奇怪问题。
我的Users 表中有一个Password 列(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' 结果...
感谢您帮助我!
【问题讨论】:
-
"我正在尝试获取 'e10adc3949ba59abbe56e057f20f883e' 的 MD5 哈希函数,实际上是......" 呃,你为什么要使用 MD5 的 MD5?另外,你为什么要使用 MD5?
-
嗨,米奇。我需要这个来生成令牌。在我的应用程序中,实际上结果 md5 将包含 3 列(用户 ID + appid + 密码)。我已经检查过 HashBytes(userid+appid) 返回正确的 md5 哈希,但是只有密码 md5 哈希是错误的......
-
为什么这是错误?你有什么期待?? MD5 是一种 不可逆 哈希算法 - 对 MD5 哈希值应用 MD5 哈希不会返回原始密码.....
-
我不需要找回密码!我只想得到字符串'e10adc3949ba59abbe56e057f20f883e'的md5哈希,仅此而已
-
马克,我的期望是得到字符串 'e10adc3949ba59abbe56e057f20f883e' 的 md5 '14e1b600b1fd579f47433b88e8d85291'。
标签: sql-server hash md5