我正在测试将密码哈希从sha-256移至sha-512或bcrypt。为此,我实现了一个非常简单的测试,但是我发现当Bcrypt尝试将其与相同的rawPassword和其他任何内容进行匹配时,使用特定的rawPassword时,它将失败,返回true而不是false。也许与编码有关,但我不确定。
...
@Test
public void testEncodePassword() {
final String rawPassword = "¡Oh envidia, raíz de infinitos males y carcoma de las virtudes!";
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encodedPassword = passwordEncoder.encode(rawPassword);
assertTrue(passwordEncoder.matches(rawPassword,encodedPassword));
assertFalse(passwordEncoder.matches("dds",encodedPassword));
assertFalse(passwordEncoder.matches("dds"+rawPassword,encodedPassword));
assertFalse(passwordEncoder.matches(rawPassword+"something else",encodedPassword));
}
...
答案 0 :(得分:1)
Bcrypt has a maximum password length of 72 (bytes)。 Java使用UTF-16编码字符串,因此您使用的密码长度约为128个字节:
>>> len("¡Oh envidia, raíz de infinitos males y carcoma de las virtudes!".encode('utf-16'))
128
如果您想支持更长的密码,请使用不同于bcrypt的密码,或者您必须在将密码提供给bcrypt之前以某种方式对密码进行哈希处理(在安全站点上询问如何安全地执行此操作)。