【问题标题】:update query for sha2 256 in SQL Server更新 SQL Server 中 sha2 256 的查询
【发布时间】:2016-04-13 23:35:33
【问题描述】:

我正在从 mysql 迁移到 ms sql server, 我在使用 mysql 时正在使用此查询。

UPDATE users SET user_password = sha2('test', 256);

我正在尝试在 mysql 服务器上使用此查询,它返回成功查询。

UPDATE users SET user_password = HASHBYTES('SHA2_256', 'test');

但是当我尝试使用此密码登录时,它总是返回错误的密码。

请指出我的错误在哪里以及如何解决。

提前致谢。

【问题讨论】:

  • 您是否在管理工作室中运行更新脚本?
  • @StephenReindl 是的,我通过管理工作室运行更新
  • 您能告诉我们在数据库中设置为新哈希的哈希吗?
  • @Matt 我解决了这个问题,我马上发帖

标签: php mysql sql-server


【解决方案1】:

这个问题实际上是我们前段时间偶然发现的一个有趣的问题。 SQL Management Studio 使用 UTF-16 作为用户的字符编码。如果将字符串直接传递给HASHBYTES,“test”似乎被解释为"t\0e\0s\0t\0"。如果你传递一个变量,则参数被正确解释:

DECLARE @tst as NVARCHAR(MAX);
SET @tst = 'test';

SELECT @tst, HASHBYTES('SHA2_256', 'test') as "UTF16", 
       HASHBYTES('SHA2_256', @tst) as "UTF8"

结果

UTF16 = '0x9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08'
UTF8 = '0xFE520676B1A1D93DABAB2319EEA03674F3632EAEEB163D1E88244F5EB1DE10EB'

【讨论】:

    【解决方案2】:

    当我偶然发现谷歌上的一些链接时,我显然解决了这个问题,这是脚本。

    UPDATE users SET usr_password = lower(CONVERT(varchar(max), HASHBYTES('SHA2_256', 'test'), 2));
    

    很抱歉给您带来不便,并感谢任何帮助过的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 2016-04-25
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      相关资源
      最近更新 更多