【问题标题】:update MD5 value not working in sql server更新 MD5 值在 sql server 中不起作用
【发布时间】:2012-04-19 12:48:28
【问题描述】:

我编写了一个查询来使用 MD5 更新密码。但新密码无效,旧密码也无效。以下是查询。

UPDATE tbl_user
SET password = HashBytes('MD5', CAST(CHECKSUM('abc') AS varchar(32)))
WHERE login_id = 'user123'

现在,当我将 abc 作为密码时,它不起作用,当我登录到我的应用程序时。

【问题讨论】:

  • 很遗憾,这里可能会出现很多问题。 password 的字段类型是什么?消费应用程序如何创建其哈希以进行比较?是否有您忘记使用的盐?
  • 不要使用md5,它已经坏了
  • 呸...密码字段的 varchar(32)。它的java代码也用于使用MD5比较密码。

标签: sql sql-server sql-server-2005


【解决方案1】:

我不确定,从来没有做过类似的事情,但我认为您需要将密码 HashBytes('MD5', CAST(CHECKSUM('abc') AS varchar(32))) 的值括在引号中,就像您在正常查询中所说的那样

UPDATE tbl_user SET password='complexpassword' WHERE login_id = 'user123'

哦,您可能应该删除 login_id 周围的括号。由于密码值没有引号,它不知道字符串的结尾在哪里,并且可能正在尝试插入 "HashBytes('MD5', CAST(CHECKSUM('abc') AS varchar(32)))WHERE (login_id = 'user123')" 作为您的密码,然后发现它没有位置信息,或者它正在识别您的字符串并将其按原样放在表中,而不是执行哈希。

最简单的方法是在将密码传递给查询语句之前对其进行哈希处理。告诉我这在您的情况下是否不起作用,以及上述修复是否不起作用。

【讨论】:

  • 好吧,我使用的是 sql server,所以它自己放置了括号。我也会尝试这个解决方案。
猜你喜欢
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 2021-06-12
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多