我正在使用jbcrypt来哈希项目中的密码。验证我正在使用的硬件上的密码时性能大约为500毫秒(log_rounds设置为12)。 然而,经过一段时间的常规使用后,表演时间突然下降到惊人的15秒。下降非常突然,没有累积,并且在重新启动过程之前保持不变。
分析显示在密钥(..)方法中使用了额外的时间。
来源:http://jbcrypt.googlecode.com/svn/tags/jbcrypt-0.3m/src/main/java/org/mindrot/jbcrypt/BCrypt.java
此方法仅使用xor,and,shift等基本函数计算哈希值。没有对象分配,外部资源的使用,随机数生成等。
同一进程中的其他功能的性能不会下降。内存分配稳定且低。不涉及完整的GC。
有没有人见过这个或为什么会发生这种情况的任何线索?我可以理解一种可变性能在某种程度上取决于其他情况,但这是一个非常突然和稳定的下降,从大约500ms。大约15000毫秒。
答案 0 :(得分:4)
SecureRandom 可能会耗尽熵并导致此问题。
答案 1 :(得分:3)
事实证明这与类加载有关。该库加载了许多不同的类加载器。当我们在系统类加载器中加载库时,问题就消失了。