首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL:加盐密码

T-SQL:加盐密码
EN

Stack Overflow用户
提问于 2011-05-13 07:29:40
回答 3查看 12.9K关注 0票数 7

我正在寻找一个使用T-SQL存储过程对密码进行盐化的示例。当然还有验证用户的匹配过程。

创建进程名(@ChangePassword nVarChar(50),@ nVarChar(50))

创建进程名(@ValidateUser nVarChar(50),@ nVarChar(50))

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-13 09:49:54

首先,我要在这里大胆地说,在数据库中对密码进行散列通常是一种关于安全性的糟糕做法。您将不受监视数据库流量的流量嗅探器的保护。防止这种情况的唯一方法是确保到数据库的连接是加密的,这通常意味着到数据库的所有其他流量都将被加密。有可能解决这个问题,但更好的解决方案是让应用程序进行散列。

正如Sam Saffron所说,您可以使用Hashbytes函数来获取SHA1散列。如果你想要更好的算法,你需要创建一个CLR过程。加盐包括为每个用户存储一个加密的随机值,然后将该值附加到密码并通过Hashbytes运行它:

代码语言:javascript
复制
Create Procedure ValidateUser
    @Username nvarchar(50)
    , @Password nvarchar(50)
As

Declare @PasswordSalt varbinary(256)

Set @PasswordSalt = ( Select PasswordSalt From Users Where Username = @Username )

If @PasswordSalt Is Null
        -- generate a salt? 

Declare @Hash varbinary(max)
Set @Hash = Hashbytes('SHA1', @PasswordSalt + Cast('|' As binary(1)) + Cast(@Password As varbinary(100))

If Exists(  Select 1
            From Users
            Where Username = @Username
                And PasswordHash = @Hash )
    -- user is valid

Else
    -- user is not valid

记住,盐应该是加密随机的,所以我不推荐使用NewId()。相反,我会使用.NET的RNGCryptoServiceProvider类来生成它。

票数 15
EN

Stack Overflow用户

发布于 2011-05-13 08:40:06

您可以使用HASHBYTES来SHA1字符串,使用NEWID()来生成随机的Guid作为salt。

票数 2
EN

Stack Overflow用户

发布于 2011-05-13 08:27:15

您是否考虑过在应用程序级别的as.the服务器硬件上对密码进行加盐处理。Cpu可能比dbms更适合处理散列和加盐?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5985708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档