Sql server SQL Server。密码哈希的数据类型(sha 512)

Sql server SQL Server。密码哈希的数据类型(sha 512),sql-server,tsql,password-hash,Sql Server,Tsql,Password Hash,不知道要为我的SQL Server选择哪个数据类型来存储sha512密码哈希。(哈希值将始终具有固定长度) declare@hashedPasswd varchar(最大值) set@hashedPasswd=convert(varchar(max),HASHBYTES('SHA2_512','anypassword with any langth'),1) 选择len(@hashedPasswd) 始终返回长度130 列的数据类型的最佳选择是什么? 变体有nvarchar(最大)、nvarc

不知道要为我的SQL Server选择哪个数据类型来存储sha512密码哈希。(哈希值将始终具有固定长度)

declare@hashedPasswd varchar(最大值)
set@hashedPasswd=convert(varchar(max),HASHBYTES('SHA2_512','anypassword with any langth'),1)
选择len(@hashedPasswd)
始终返回长度130

列的数据类型的最佳选择是什么? 变体有nvarchar(最大)、nvarchar(130)、varchar、char。 如果我理解正确,在我的例子中,nvarchar是一种浪费空间的行为,因为它在散列值中只是ASCII符号


请协助。

SHA2_512的长度为64字节,内部包含一个varbinary,因此我建议改用此数据类型。 为了更安全,我还建议使用额外的salt进行密码加密和解密。您可以在此处找到有用的说明:


请注意,Stephan

SHA2_512的长度为64字节,内部为varbinary,因此我建议改用此数据类型。 为了更安全,我还建议使用额外的salt进行密码加密和解密。您可以在此处找到有用的说明:

最好的问候,Stephan

根据,
hasbytes
返回一个
varbinary
,因此您的数据类型是
varbinary

您的长度为130只是因为您正在强制转换为varchar,并且存储它的方式效率低下。从文档中,sha512返回64个字节,因此所需的长度为64

 declare @hashedPasswd varbinary(max)
 set @hashedPasswd = HASHBYTES('SHA2_512', 'any password with any length')
 select len (@hashedPasswd)
根据hasbytes返回一个
varbinary
,因此您的数据类型是
varbinary

您的长度为130只是因为您正在强制转换为varchar,并且存储它的方式效率低下。从文档中,sha512返回64个字节,因此所需的长度为64

 declare @hashedPasswd varbinary(max)
 set @hashedPasswd = HASHBYTES('SHA2_512', 'any password with any length')
 select len (@hashedPasswd)

为什么要使用
varchar
HASHBYTES
返回长度最多为8000的
varbinary
。sha_512是哈希算法。据我所知,散列值总是130 SYMBOLS为什么要使用
varchar
HASHBYTES
返回长度最多为8000的
varbinary
。sha_512是哈希算法。据我所知,哈希值总是130个符号