sql服务器密码如何显示,sql-server

SQL Server密码哈希算法:

hashBytes = 0x0100 | fourByteSalt | SHA1(utf16EncodedPassword+fourByteSalt)

例如,要将密码哈希“正确的马电池主食” 。 首先我们生成一些随机盐:

fourByteSalt = 0x9A664D79;

然后将密码(以UTF-16编码)与salt一起散列:

SHA1("correct horse battery staple" + 0x9A66D79);

=SHA1(0x63006F007200720065006300740020006200610074007400650072007900200068006F00720073006500200073007400610070006C006500 0x9A66D79)

=0x6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3

存储在syslogins表中的值是以下的串联:

[header] + [salt] + [hash]

0x0100 9A664D79 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3

您可以在SQL Server中看到:

SELECT

name, CAST(password AS varbinary(max)) AS PasswordHash

FROM sys.syslogins

WHERE name = 'sa'

name PasswordHash

==== ======================================================

sa 0x01009A664D796EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3

版本标题: 0100

盐(四个字节): 9A664D79

散列: 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 (SHA-1为20字节; 160位)

验证

您可以通过执行相同的哈希来验证密码:

从保存的PasswordHash获取salt:0x9A664D79

并再次执行哈希:

SHA1("correct horse battery staple" + 0x9A66D79);

这将是相同的哈希,你知道密码是正确的。

曾经很好,但现在很弱

1999年在SQL Server 7中引入的散列算法在1999年表现良好。

密码哈希盐渍是好的。

这是好事,盐追加到密码,而不是预先准备它。

但今天它已经过时了。 它只运行哈希一次,它应运行几千次,以阻止暴力攻击。

实际上,作为其检查的一部分,微软的Baseline Security Analyzer将尝试强制密码。 如果它猜对了,它会将密码报告为弱。 它确实得到了一些。

蛮力

为了帮助您测试一些密码:

DECLARE @hash varbinary(max)

SET @hash = 0x01009A664D796EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3

--Header: 0x0100

--Salt: 0x9A664D79

--Hash: 0x6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3

DECLARE @password nvarchar(max)

SET @password = 'password'

SELECT

@password AS CandidatePassword,

@hash AS PasswordHash,

--Header

0x0100

+

--Salt

CONVERT(VARBINARY(4), SUBSTRING(CONVERT(NVARCHAR(MAX), @hash), 2, 2))

+

--SHA1 of Password + Salt

HASHBYTES('SHA1', @password + SUBSTRING(CONVERT(NVARCHAR(MAX), @hash), 2, 2))

SQL Server 2012和SHA-512

从SQL Server 2012开始,Microsoft切换到使用SHA-2 512位:

hashBytes = 0x0200 | fourByteSalt | SHA512(utf16EncodedPassword+fourByteSalt)

将版本前缀更改为0x0200 :

SELECT

name, CAST(password AS varbinary(max)) AS PasswordHash

FROM sys.syslogins

name PasswordHash

---- --------------------------------

xkcd 0x02006A80BA229556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393FC66226B7D38

版本: 0200 (SHA-2 256位)

盐: 6A80BA22

散列(64字节): 9556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393FC66226B7D38

这意味着我们使用salt后缀散列UTF-16编码的密码:

SHA512( “正确的马电池订书钉” + 6A80BA22 )

SHA512( 63006f0072007200650063007400200068006f0072007300650020006200610074007400650072007900200073007400610070006c006500 + 6A80BA22 )

9556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393FC66226B7D38

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值