1

当我为 dtb 创建新条目时,我理解 hash+salt 的概念。如果我有一些固定的盐字符串,实现它可能并不难,但是当我想使用例如用户的生日作为盐时怎么做?将该密码保存到数据库很容易,但是如何在登录期间对其进行哈希处理?我已经在我的文件中搜索了这段代码applicationContext-security.xml,他们在其中使用username了 salt 的值:

<!-- authentication from database -->
<security:authentication-manager>
    <security:authentication-provider>
        <security:jdbc-user-service
            data-source-ref="dataSource"
            users-by-username-query="
          select username,password, enabled 
          from users where username=?"authorities-by-username-query="
          select u.username, ur.authority from users u, user_roles ur 
          where u.user_id = ur.user_id and u.username =?  " />
    <security:password-encoder hash="sha-256">
        <security:salt-source user-property="username" />
        </security:password-encoder-->
    </security:authentication-provider>

</security:authentication-manager>

因此,如果我理解正确,这意味着,如果我想将用户的生日用作盐,我必须将其存储在我的 dtb 中,将其从 dtb 中取出,然后将其用作盐?这对我来说没有意义,因为如果我的表中有 , ,usersusername,那么可以对密码进行哈希处理,但对于可能的攻击者来说,很清楚该值将用作盐。有什么我遗漏的东西还是真的有效吗?passwordbirthdaybirthday

4

2 回答 2

1

使用盐的目的是保护用户的密码,以防黑客转储数据库。因为哈希是一种单向转换(您无法反转转换以获取纯文本密码),黑客正在使用哈希字典来猜测用户的密码(使用常见的密码短语)。所以添加盐会增加额外的保护层来抵御这种类型的攻击。

来自维基百科:

字典攻击

彩虹表攻击

于 2013-08-16T12:52:04.403 回答
1

盐不是敏感信息,是否泄露无关紧要。盐只是防止对哈希的彩虹表攻击。请注意,盐应该具有相当高的熵,并且生日可能不如从SecureRandom.

于 2013-08-16T12:52:11.890 回答