Spring Bcrypt 是无状态的,不需要安全的随机数?
Spring Bcrypt is stateless and doesn't need a secure random?
我对 Spring 安全 BCrypt 有 两个疑问:
- Bcrypt 是否需要强度和安全的随机数才能安全?
- 在 MySQL(BINARY 与 CHAR)中保存哪种数据类型最好?
关于第一个疑问,我看了很多教程,发现总是一样的配置(默认)
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
那么,我可以认为这个配置是无状态的吗?不需要为我的 Web 服务使用强度和安全随机生成与默认配置不同的哈希值?
关于第二个疑问,Bcrypt 哈希长度是否始终为 60?那么,在我的数据库中使用 CHAR(60) 还是 BINARY(60) 更好?
Spring 安全是开源的。这是 BCryptPasswordEncoder
的 source code
如果您不传入 SecureRandom
,它只会创建一个新的。从安全的角度来看,这很好。出于性能或测试能力的原因,您可以自己传递。
如果您不传入 Strength
,它会使用 GENSALT_DEFAULT_LOG2_ROUNDS
,即 10,这是相当安全的。为了安心,你可以传入这个值。
Spring 安全的数据库架构建议 varchar(50)
用于 password
列,但看起来 60 是正确的,无论如何 bcrypt。
我会使用 char
/varchar
而不是 binary
,因为它更易于阅读(视觉上)。
我对 Spring 安全 BCrypt 有 两个疑问:
- Bcrypt 是否需要强度和安全的随机数才能安全?
- 在 MySQL(BINARY 与 CHAR)中保存哪种数据类型最好?
关于第一个疑问,我看了很多教程,发现总是一样的配置(默认)
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
那么,我可以认为这个配置是无状态的吗?不需要为我的 Web 服务使用强度和安全随机生成与默认配置不同的哈希值?
关于第二个疑问,Bcrypt 哈希长度是否始终为 60?那么,在我的数据库中使用 CHAR(60) 还是 BINARY(60) 更好?
Spring 安全是开源的。这是 BCryptPasswordEncoder
如果您不传入 SecureRandom
,它只会创建一个新的。从安全的角度来看,这很好。出于性能或测试能力的原因,您可以自己传递。
如果您不传入 Strength
,它会使用 GENSALT_DEFAULT_LOG2_ROUNDS
,即 10,这是相当安全的。为了安心,你可以传入这个值。
Spring 安全的数据库架构建议 varchar(50)
用于 password
列,但看起来 60 是正确的,无论如何 bcrypt。
我会使用 char
/varchar
而不是 binary
,因为它更易于阅读(视觉上)。