Tag: salt

Spring Security自定义身份validation和密码编码

有没有教程或有没有人有关于如何使用Spring-Security做以下指示? 任务: 我需要从我的数据库中获取validation用户名的salt,并使用它来对提供的密码(从login页面)进行encryption,以便将其与存储的encryption密码(也就是对用户进行身份validation)进行比较。 附加信息: 我使用自定义的数据库结构。 UserDetails对象是通过自定义的UserDetailsService创build的,而UserDetailsService则使用自定义的DAOProvider从数据库中获取信息。 我的security.xml文件到目前为止: <authentication-manager> <authentication-provider user-service-ref="userDetailsService"> </authentication-provider> </authentication-manager> 现在我想我会需要 <password-encoder hash="sha" /> 但还有什么? 如何告诉spring安全使用数据库提供的salt来编码密码? 编辑 : 我发现这个SOpost是信息性的,但不够:如果我在我的xml中定义一个盐密码源以供密码编码器使用,如下所示: <password-encoder ref="passwordEncoder"> <salt-source ref="saltSource"/> </password-encoder> 我将不得不写一个自定义SaltSource来使用我的自定义盐。 但是这不是在UserDetails对象内部find的。 所以… 备选案文1: 我可以使用自定义UserDetails的实现,然后可能有salt属性? <beans:bean id="saltSource" class="path.to.MySaltSource" p:userPropertyToUse="salt"/> 和 @Service("userDetailsService") public class UserDetailsServiceImpl implements UserDetailsService { public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { // … return buildUserFromAccount(account); […]

我需要用bcrypt存储盐吗?

bCrypt的javadoc具有如何encryption密码的代码: String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 要检查明文密码是否与之前已经散列过的密码匹配,请使用checkpw方法: if (BCrypt.checkpw(candidate_password, stored_hash)) System.out.println("It matches"); else System.out.println("It does not match"); 这些代码片断暗示着随机生成的盐被扔掉了。 这是这种情况,还是这只是一个误导性的代码片段?

最佳做法:腌制和胡椒粉密码?

我遇到了一个讨论,在这个讨论中,我了解到我所做的事情实际上并不是叮叮当当的密码,而是从此开始使用以下function: hash_function($salt.hash_function($pepper.$password)) [multiple iterations] 忽略select的散列algorithm(我希望这是一个盐和辣椒的讨论,而不是具体的algorithm,但我使用的是一个安全的),这是一个安全的select,还是应该做一些不同的? 对于那些不熟悉的条款: salt是随机生成的值,通常与数据库中的string一起存储,旨在使不可能使用散列表来破解密码。 由于每个密码都有自己的盐,所以他们都必须单独被强制性的破解。 然而,由于盐与密码散列存储在数据库中,数据库的妥协意味着两者都将丢失。 胡椒是一个站点范围的静态值,与数据库分开存储(通常在应用程序的源代码中硬编码),这是为了保密。 它的使用是为了妥协的数据库不会导致整个应用程序的密码表是暴躁的。 有什么我失踪,并腌制和胡椒我的密码保护我的用户的安全的最佳select? 这样做有没有潜在的安全缺陷? 注意:为了讨论的目的,假定应用程序和数据库存储在不同的机器上,不要共享密码等,因此违反数据库服务器并不意味着违反应用程序服务器。