wildfly 8.2とJava 1.7を使用しているプロダクション環境では、本当に好奇心が強いです。Javaダイジェストを使用したハッシュ生成が遅くなる
サーバーが2週間以上稼働していると、ログインがパフォーマンスを低下させ始めることがあります。私は問題がどこにあるのかを示す手がかりを探していました。そしていくつかのテストをした後、私は、プレーンテキストに挿入されたパスワードが既に挿入されているパスワードと比較されるように暗号化されているという問題があると結論づけました。
パスワードを暗号化する機能を実行するとほぼ2分かかりますが、サーバーを再起動すると同じ実行に30秒以下かかります。
暗号化では、java.security.MessageDigestを使用してハッシュを生成しています。具体的には、50000回の繰り返しでSHA-256を使用します。なぜこのプロセスが時間とともに遅くなるのか?私は/ dev/randomをランダムに生成するために使用しているので、問題ではないはずです。ここで
は目的球コードです:
protected byte[] hash(byte[] bytes, byte[] salt, int hashIterations) throws UnknownAlgorithmException {
MessageDigest digest = getDigest(getAlgorithmName());
if (salt != null) {
digest.reset();
digest.update(salt);
}
byte[] hashed = digest.digest(bytes);
int iterations = hashIterations - 1; //already hashed once above
//iterate remaining number:
for (int i = 0; i < iterations; i++) {
digest.reset();
hashed = digest.digest(hashed);
}
return hashed;
}
は、あなたが正確に示されたコードブロックが犯人であることを100%よろしいです?周囲や内部には何もありません。 'getDigest()'や 'getAlgorithmName()'や既存のデータとハッシュを比較するものはありますか? –
メモリリークがないことを確認しましたか?あなたの生活の時間が上がると症状が遅くなる – Pelocho
こんにちは@DominikSandjajaあなたの迅速な答えに感謝します。私のテスト能力は限られているので、コードの断片(認証に使用されている外部ライブラリにあります)にその問題を減らすことができましたが、私はちょうどその行を確信できません。 digest.digest(ハッシュされた)部分。 –