Spring Bcrypt是无状态的,不需要安全的随机?

时间:2016-04-07 13:45:31

标签: mysql database spring spring-security bcrypt

我对Spring Security BCrypt有两个疑问

  1. Bcrypt是否需要强制并确保随机安全?
  2. 要在MySQL中保留哪种最佳数据类型(BINARY与CHAR)?
  3. 关于第一个疑问,我阅读了很多教程,我发现总是相同的配置(默认)

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    

    那么,我可以认为这种配置是无状态的吗?我的Web服务不需要使用强项和安全随机生成默认配置的不同哈希值吗?

    关于第二个疑问,Bcrypt哈希长度总是60?那么,最好在我的数据库中使用CHAR(60)或BINARY(60)吗?

1 个答案:

答案 0 :(得分:0)

Spring Security是开源的。这是BCryptPasswordEncoder

source code

如果你没有传递SecureRandom它只是创建一个新的。从安全角度来看,这很好。出于性能或测试能力的原因,您可以自行传递。

如果您未通过Strength,则使用GENSALT_DEFAULT_LOG2_ROUNDS即10,这是相当安全的。为了安心,你可以传递这个值。

Spring Security的数据库架构为varchar(50)列建议password,但对于bcrypt,它看起来像60是正确的。

我在char上使用varchar / binary,因为它更容易阅读(视觉上)。