我想向我的同事推荐,我们都使用bcrypt对存储的密码进行散列。我们都使用java,我不愿推荐jBCrypt,因为它的最新版本号(0.3)表明它是beta版本。我看到最近版本的Security包含了一个实现,它主要是来自jBCrypt的精确代码。我所说的“大部分”是指Security已经改变了它,以满足他们的编码约定,而我几乎没有发现其他什么。对我来说,Spring安全是一个很好的认可标志。我的问题是:你们会不会觉得推荐Spring的实现很舒服?如果我测试它并将结果与实际的bcrypt结果进行比较,这是否足够好?我怎么知道我的测试是否彻底?
发布于 2012-10-05 19:38:19
您可以自己审计jBCrypt代码。它很小:一个750行的源代码文件,其中一半是常量数组.此外,由于这是Java,您不必担心C的可怕的“未定义行为”:如果它在您的机器上运行良好,那么它在任何地方都能正常工作(对于不涉及线程的那种代码,对浮点计算的系统访问,Java的“写一次,到处运行”的口号往往是真的)。
您还可以查看附带的TestBCrypt.java文件:这看起来像是对已知测试向量(包括一些非ASCII密码)的合理彻底的应用。密码在我看来没问题。
对于大多数开源项目来说,版本号是没有意义的,因为它们比软件的任何实际技术质量更能解释作者内心的满足感。
注意:当然,由于慢散列是防御方和攻击者之间的预算竞争,通过使用Java,您将给攻击者提供3x的优势:他将使用优化的C或程序集(或一些FPGA)。然而,正确应用bcrypt,即使使用Java,也足以确保密码存储不再是最糟糕的问题。
发布于 2013-01-16 05:02:11
无论是Spring版本还是最初的Mindriot jBCrypt端口,推荐BCrypt绝对是安全的。不要让版本号吓到您,因为它只是作者版本控制方案的结果。
有关发行说明,请参见http://www.mindrot.org/projects/jBCrypt/
https://security.stackexchange.com/questions/21184
复制相似问题