SQL 哈希密码

3

我正在使用SQL语句手动将旧数据导入到MSSQL中。当我将原始文本密码哈希值插入到数据库中的MVC 5 passwordHASH字段时,会出现奇怪的字符。我该如何将哈希值插入到MVC 5身份验证表中?MVC 5表也使用nvarchar。

select HASHBYTES('SHA2_512', 'P@ssw0rd')as beforehash --looks good in result
0x6BFCC4026B5F162799A6DC8305C09DB9C1674AC616BD5C7422A45FBB6D0816AC163047C47A1F426F4F4C6B5B5042C671EABC4FDC7310FD5B183EEF59DC274604

declare @afterhash nvarchar(128)
set @afterhash=HASHBYTES('SHA2_512', 'P@ssw0rd')
select @afterhash as afterhash --funny character if put inside a variable or insert to data base

ﱫ˄彫✖ꚙ菜쀅릝柁왊봖瑜ꐢ뭟࡭갖〖쑇ὺ潂䱏孫䉐燆볪�ၳ寽㸘姯⟜ц

2
你要插入的字段类型是什么?如果它是二进制/可变二进制,你根本不需要进行转换;如果它是nvarchar(它可能不应该是),并且你想将十六进制值作为字符串使用,则使用CONVERT(NVARCHAR(130), HASHBYTES('SHA2_512', 'P@ssw0rd'), 1)(将最后一个参数更改为2以去掉0x)。 - Alex K.
不错。我也尝试了转换方法,但是我没有添加参数。在添加了参数后,它输出了正确的结果。谢谢。 - MVC newbie
1个回答

6

hashbytes返回varbinary数据类型,您正在尝试将其插入到一个nvarchar变量中。

如果您不想将此值存储为二进制,而是想要当前可见的文本,您有几个选项,具体取决于您是否想保留0x二进制前缀:

declare @afterhash varbinary(500) = HASHBYTES('SHA2_512', 'P@ssw0rd')

select @afterhash as varbinaryValue
        ,convert(nvarchar(1000), @afterhash, 1) as nvarcharIncludePrefix
        ,convert(nvarchar(1000), @afterhash, 2) as nvarcharExcludePrefix

输出:

varbinaryValue         - 0x6BFCC4026B5F162799A6DC8305C09DB9C1674AC616BD5C7422A45FBB6D0816AC163047C47A1F426F4F4C6B5B5042C671EABC4FDC7310FD5B183EEF59DC274604
nvarcharIncludePrefix  - 0x6BFCC4026B5F162799A6DC8305C09DB9C1674AC616BD5C7422A45FBB6D0816AC163047C47A1F426F4F4C6B5B5042C671EABC4FDC7310FD5B183EEF59DC274604
nvarcharExcludePrefix  - 6BFCC4026B5F162799A6DC8305C09DB9C1674AC616BD5C7422A45FBB6D0816AC163047C47A1F426F4F4C6B5B5042C671EABC4FDC7310FD5B183EEF59DC274604

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接