如果我的数据库中的表如下所示:
userid uniqueidentifier
username varchar(20)
password varbinary(max)
当用户提交(注册)时,我将用户/通行证发送到存储过程。
存储过程创建一个新的 GUID(使用NEWID() http://msdn.microsoft.com/en-us/library/ms190348(SQL.90).aspx)然后我用哈希字节 http://msdn.microsoft.com/en-us/library/ms174415(SQL.90).aspxSQL Server 的 (sha1) 函数根据提供的 GUID+密码创建密码,然后将值插入到上表中。
当用户提交(登录)时,我将用户/密码发送到存储过程。
存储过程查找用户名并获取用户 ID,将 guid+密码的 hashbyte(sha1) 与密码字段进行比较。
你认为这个逻辑有什么缺陷吗?
这是相当标准的——一个指南对于盐来说就可以了。加盐的目的是为了防止彩虹攻击 http://en.wikipedia.org/wiki/Rainbow_table,几乎任何对每个用户来说随机的值(或者即使不是随机的,至少是不同的)都可以达到目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)