【发布时间】:2011-09-04 23:49:39
【问题描述】:
编辑:好的,所以我在这里找到了答案BCrypt says long, similar passwords are equivalent - problem with me, the gem, or the field of cryptography?
不过,新问题是,如果在我们试图教育用户选择越来越复杂的密码甚至密码短语的世界中,如果您必须限制用户的密码长度,那么有人如何推荐使用 bCrypt 进行散列,说您的密码必须更短在 thedailywtf.com 星期五的屏幕截图中,似乎有超过 n 个字符的方式结束 :)
原始问题如下:
我正在重构一个应用程序的旧登录页面,并决定使用 JAVA 实现 jBCrypt (http://www.mindrot.org/projects/jBCrypt/) 试一试 bCrypt,结果遇到了一个主要的问题。
问题在于 checkpw 方法,当使用非常长的种子时,该方法似乎总是返回 true。我打算用 {InternalSalt}{username}{password} 对用户的密码加盐,然后用 bCrypt 对其进行哈希处理。
所以我有以下代码(尽可能将其剥离以隔离 checkpw)。
public class Test {
public static void main(String[] args) {
String plaintext = "jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:D@$^_80I{qrn1HM6423{FtestAccountO1nu3jKN";
String pw_hash = BCrypt.hashpw(plaintext, BCrypt.gensalt());
if (BCrypt.checkpw("jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:D@$^_80I{qrn1HM6423{FtestAccountO1nu3jKN", pw_hash))
System.out.println("It matches");
else
System.out.println("It does not match");
}
}
这将打印“它匹配”。
我遇到的问题是说您将说 aaa 添加到您传递给 checkpw 的密码中
BCrypt.checkpw("jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:D@$^_80I{qrn1HM6423{FtestAccountO1nu3jKNaaa", pw_hash)
它仍然返回 true!不完全是我所期待的。我在文档中看不到任何密码长度限制,但我无法用较小的密码种子重现它,而且看起来如果我修改了字符串末尾以外的任何其他内容,它会按预期返回 false。
我错过了什么重要的事情吗?我知道我一定不是唯一在这些论坛上使用 jBcrypt 的人,因为我在做一些研究时看到许多帖子中推荐 BCrypt。
编辑:Windows 7 64 位 - Java(TM) SE 运行时环境(内部版本 1.6.0_24-b07)
【问题讨论】:
标签: security encryption passwords salt blowfish