SQL 散列密码

MVC*_*bie 3 sql-server hash asp.net-mvc-5

我正在使用 SQL 语句从旧数据手动导入到 MSSQL。当我从原始文本密码散列到数据库中的 MVC 5 passwordHASH 字段时,我得到了有趣的字符。我如何将哈希插入 mvc5 标识表?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

????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

iam*_*ave 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
Run Code Online (Sandbox Code Playgroud)

输出:

varbinaryValue         - 0x6BFCC4026B5F162799A6DC8305C09DB9C1674AC616BD5C7422A45FBB6D0816AC163047C47A1F426F4F4C6B5B5042C671EABC4FDC7310FD5B183EEF59DC274604
nvarcharIncludePrefix  - 0x6BFCC4026B5F162799A6DC8305C09DB9C1674AC616BD5C7422A45FBB6D0816AC163047C47A1F426F4F4C6B5B5042C671EABC4FDC7310FD5B183EEF59DC274604
nvarcharExcludePrefix  - 6BFCC4026B5F162799A6DC8305C09DB9C1674AC616BD5C7422A45FBB6D0816AC163047C47A1F426F4F4C6B5B5042C671EABC4FDC7310FD5B183EEF59DC274604
Run Code Online (Sandbox Code Playgroud)