varchar的HASHBYTES返回错误的哈希值

时间:2010-08-13 23:03:50

标签: sql

我目前有一个数据库架构,其中包含用户的纯文本密码。我添加了一个名为password of binary(16)的新列,目的是通过MD5散列当前的纯文本密码。当我这样做时,我发现存储在密码字段中的值是错误的。这是我的转换查询:

UPDATE my_table SET password=HASHBYTES('MD5', plain_text_password);

对于我的一条记录,纯文本密码为asdf。正确的MD5值为0x912ec803b2ce49e4a541068d495ab570。但是,该记录正在更新为0xEC81AFD2DF2BDA47850F9182F4AC300D

以前有没有人见过这样的问题?我正在使用SQL Server 2008。

更新 考虑到这一点,我将纯文本密码字段从varchar(MAX)转换为varchar(50)。它在SQL管理工作室中以相同的方式显示,但我想知道当数据是以varchar(MAX)格式时的基础编码是否以某种方式被复制到新的varchar(50)格式,从而导致出现差异。

1 个答案:

答案 0 :(得分:1)

所以我弄清楚这里出了什么问题。在我转换了所有纯文本密码字段之后(或者这可能一直都是如此,我不确定)在字段的末尾附加了一堆\ 0。因此,不是“苹果”这个词,而是'apple \ 0 \ 0 \ 0 \ 0 \ 0'。 SQL Management Studio不显示这些\ 0,但是Visual Studio调试器没有。删除所有尾随\ 0后,我的问题就消失了。