SQL 服务器。密码哈希的数据类型 (sha 512)

时间:2021-03-20 15:53:58

标签: sql-server tsql password-hash

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

 declare @hashedPasswd varchar(max)
 set @hashedPasswd = convert(varchar(max), HASHBYTES('SHA2_512', 'any password with any langth'), 1)
 select len (@hashedPasswd)

总是返回 130 的长度。

列的数据类型的最佳选择是什么? 变体是 nvarchar(max)、nvarchar(130)、varchar、char。 如果我理解正确,nvarchar 在我的情况下是浪费空间,因为它只会是散列值中的 ASCII 符号。

请帮忙。

2 个答案:

答案 0 :(得分:1)

SHA2_512 是 64 字节长,内部是 varbinary,所以我建议改用这个数据类型。 为了更安全,我还建议使用额外的盐进行密码加密和解密。您可以在此处找到有用的说明: https://www.mssqltips.com/sqlservertip/4037/storing-passwords-in-a-secure-way-in-a-sql-server-database/

最好的问候,斯蒂芬

答案 1 :(得分:1)

根据 documentationhasbytes 返回 varbinary,因此您的数据类型是 varbinary

您的长度为 130 只是因为您正在转换为 varchar 并且是一种低效的存储方式。从文档中,sha512 返回 64 字节,因此您需要的长度为 64。

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