【问题标题】:SQL Server. DataType for password hash (sha 512)SQL 服务器。密码哈希的数据类型 (sha 512)
【发布时间】:2021-06-17 18:29:39
【问题描述】:

想知道为我的 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 符号。

请帮忙。

【问题讨论】:

  • 你为什么要使用varcharHASHBYTES 返回一个 varbinary,长度最大为 8000。
  • sha_512 是散列算法。据我了解,散列值将始终为 130 个符号

标签: sql-server tsql password-hash


【解决方案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)

【讨论】:

    【解决方案2】:

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

    最好的问候,斯蒂芬

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2011-10-14
      相关资源
      最近更新 更多