SQL将HashBytes SHA2_512密码更新为HashBytes SHA2_512 SALT

SQL将HashBytes SHA2_512密码更新为HashBytes SHA2_512 SALT,sql,encryption,salt,sha2,Sql,Encryption,Salt,Sha2,我目前正在更新一个网站,以通过HashBytes SHA2_512 SALT组合密码进行身份验证 我的问题是,一旦我这样做,我所有的当前用户将不再能够使用他们现有的HashBytes SHA2_512密码登录 是否有一种方法可以通过SQL解密(更新)当前HashBytes SHA2_512密码和HashBytes SHA2_512 SALT组合密码 下面是我选择验证的一个示例 //current which will no longer work once i have updated the

我目前正在更新一个网站,以通过HashBytes SHA2_512 SALT组合密码进行身份验证

我的问题是,一旦我这样做,我所有的当前用户将不再能够使用他们现有的HashBytes SHA2_512密码登录

是否有一种方法可以通过SQL解密(更新)当前HashBytes SHA2_512密码和HashBytes SHA2_512 SALT组合密码

下面是我选择验证的一个示例

//current which will no longer work once i have updated the page 

SELECT intcustomerid, strUserName, strUserPassword
FROM dbo.tblLoginControl WHERE strUserName = 'Dave' AND strUserPassword =HashBytes('SHA2_512', 'Rice205H*!')


//new one once I have update the page

SELECT [AccountName], [AccountPwd]
FROM [dbo].[SecurityAccounts] WHERE [AccountName]= 'Dave' AND [AccountPwd] =HashBytes('SHA2_512',  [Salt] +  'Rice205H*!')
所以我需要使用现有的密码并用Salt更新

我不确定这是否可以做到,唯一的解决办法是给我的用户发电子邮件,让他们从网站上申请新密码

谢谢。

无法“解密”散列密码。如果密码是否用盐加密,为什么不添加一列(位)存储

那只是另一种情况,比如:

AND ((isSalted = false 
      AND strUserPassword =HashBytes('SHA2_512', 'Rice205H*!'))
    or [AccountPwd] =HashBytes('SHA2_512',  [Salt] +  'Rice205H*!'))

@阿乔姆,谢谢。这可能是最好的途径,对我的用户来说,这可能会减少痛苦。我看了一下,很快就回答了。这是一个很好的例子,说明了为什么用版本作为哈希前缀是一个好主意。@zaph你能解释一下“用版本作为哈希前缀”是什么意思吗?如果你添加了一个版本指示符,那么当(而不是如果)需要更改方案时,就可以不必使当前的实现无效。这允许将来进行校对并逐步过渡到新版本。请注意,一些密码哈希方案使用
$x$
前缀,其中
x
表示版本。