【问题标题】:Variable and degrading performance when using jbcrypt使用 jbcrypt 时的可变性能和性能下降
【发布时间】:2014-03-02 05:55:22
【问题描述】:

我正在使用 jbcrypt 对项目中的密码进行哈希处理。在我使用的硬件上验证密码时,性能大约为 500 毫秒(log_rounds 设置为 12)。 然而,在正常使用一段时间后,性能时间突然下降到惊人的 15 秒。下降非常突然,没有积聚,并且在重新启动过程之前保持不变。

Profiling 显示在 key(..) 方法中使用了额外的时间。

来源:http://jbcrypt.googlecode.com/svn/tags/jbcrypt-0.3m/src/main/java/org/mindrot/jbcrypt/BCrypt.java

此方法仅使用 xor、and、shift 等基本函数计算哈希。没有对象分配、外部资源使用、随机数生成等。

性能不会因同一进程中的其他功能而下降。内存分配稳定且低。不涉及 Full GC。

有没有人以前见过这种情况或任何线索来解释为什么会发生这种情况?我可以理解在某种程度上取决于其他情况的可变性能,但这是从大约 500 毫秒开始的非常突然和稳定的下降。到大约 15000 毫秒。

【问题讨论】:

  • 你调用什么函数来验证密码?
  • key 本身只是对streamtowordencipher 的调用的固定长度循环。您的分析是否确定了在这些方法中花费的总时间?
  • 你能试试像visualvm这样的工具吗?它重量轻,可能有助于识别瓶颈。
  • @joe 不完全是这两种方法,但我同意很可能在那里使用时间。

标签: java performance security bcrypt jbcrypt


【解决方案1】:

SecureRandom 可能会耗尽熵并导致此问题。

How to solve performance problem with Java SecureRandom?

【讨论】:

  • 这可能是原因,但 SecureRandom 仅在库生成新盐时使用,而在验证密码时不使用该部分。
【解决方案2】:

原来这与类加载有关。该库被加载到许多不同的类加载器中。当我们在系统类加载器中加载库时,问题就消失了。

【讨论】:

  • 你是如何避免的?为什么会出现问题?
猜你喜欢
  • 2020-02-05
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多