我正在设计一个认证系统,它的工作原理如下:
- 用户输入密码
- 生成盐值。
- 使用whirlpool算法对密码进行哈希处理
- 将whirlpool哈希处理后的密码与明文盐值连接在一起
- 使用sha1算法对连接后的版本进行哈希处理,并将结果存储在数据库中。
- 我通过在应用程序层对密码进行哈希处理,然后执行以下操作(在MySQL中)来检查密码是否正确:
MySQL
WHERE `Password` = SHA1(CONCAT('$hashedPassword',`Salt`)) AND [..]
目前我的盐值是64字节。这样是否足以使字典攻击变得不可行?
我知道sha1有已知的漏洞,但它是我使用的MySQL版本(5.1)中唯一可用于数据库层的函数,而不是在应用程序和数据库层之间选择明文盐。
Salt
引用的是字段本身,而不是字面字符串。 - Will Morgan