想知道为我的 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 符号。
请帮忙。
答案 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)
根据 documentation,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)