Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何选择所有行并使用其哈希代码更新字段?_Sql Server_Sql Server 2008_Select - Fatal编程技术网

Sql server 如何选择所有行并使用其哈希代码更新字段?

Sql server 如何选择所有行并使用其哈希代码更新字段?,sql-server,sql-server-2008,select,Sql Server,Sql Server 2008,Select,在我的项目中,我缺乏sql编程知识。我有一个带有passowrd字段的tbUsers。但是,现在我必须把它们转换成散列MD5,到目前为止对散列很好 但是,我如何选择所有记录的密码并用其哈希值更新它们?我并不真正需要hashvalue部分,只需要全选并更新每一行 由于HashBytes代码是 HashBytes('MD5', 'MyPassword') 我需要获取每一行的“MyPassword”并执行哈希部分 如果HashBytes()确实如所述,那么这就是您可能需要的全部内容 UPDAT

在我的项目中,我缺乏sql编程知识。我有一个带有passowrd字段的tbUsers。但是,现在我必须把它们转换成散列MD5,到目前为止对散列很好

但是,我如何选择所有记录的密码并用其哈希值更新它们?我并不真正需要hashvalue部分,只需要全选并更新每一行

由于HashBytes代码是

HashBytes('MD5', 'MyPassword')
我需要获取每一行的“MyPassword”并执行哈希部分

如果HashBytes()确实如所述,那么这就是您可能需要的全部内容

   UPDATE tblUsers
    SET password = HashBytes('MD5', password)
    --WHERE   -- here you could have some condition if somehow you didn't want 
              --all of the row updated.

但是,您可以考虑修改表以获得一个新列,将其称为MD5,而不是“设置MD5=…”。这将允许您暂时保留密码,在出现问题时,或者如果您想使用关联的MD5登录测试一些登录,这将非常方便。

对我有用的解决方案是:

UPDATE tbUsers
SET password = SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', tbUsers.password)),3,32)
FROM tbUsers INNER JOIN tbUsers tbUsers2
ON tbUsers.codUser = tbUsers2.codUser

我不确定这是什么原因,但作为记录,对于能够访问散列密码(至少对于弱密码)的人来说,密码散列几乎不能防止密码发现。预先计算数十亿个潜在密码的MD5散列(单词、名称,与a->4、I->1、O->0替换相同,单词加倍或末尾加1,短随机字符串等)并将它们存储在一个包含生成它们的密码的表中,并编制索引。找到一个散列密码,如果这个密码是数十亿个密码中的一个,你会在一瞬间找到它。您还可以了解各组人员是否都使用相同的密码(如果您可以访问所有密码哈希)


如果您这样做是为了安全,那么从存储散列盐渍密码开始吧。

谢谢mjv!我找到答案了!