org.jasypt.encryption.pbe.StandardPBEByteEncryptor では、他のいくつかのキー導出機能を比較すると、キー導出が異なるように見えます。
initialize() メソッドには、秘密鍵を生成するための以下のコードがあります。
PBEKeySpec pbeKeySpec = new PBEKeySpec(this.password.toCharArray());
SecretKeyFactory factory = SecretKeyFactory.getInstance(this.algorithm);
this.key = factory.generateSecret(pbeKeySpec);
PBEKeySpec に渡されるソルトと反復回数がありません。
しかし、encrypt() メソッドには以下のコードがあります。
PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, this.keyObtentionIterations);
byte[] encyptedMessage = null;
synchronized (this.encryptCipher) {
this.encryptCipher.init(
Cipher.ENCRYPT_MODE, this.key, parameterSpec);
encyptedMessage = this.encryptCipher.doFinal(message);
}
これには、PBEParameterSpec として渡されたソルトと反復カウントがあります。
PBKDF2 によると、秘密鍵はパスワード、salt、反復回数を使用して生成されます。
上記のコードでは、最初に initialize() メソッドとソルトでキーが生成され、encrypt() メソッドで反復回数が PBEParameterSpec として渡されます。
質問は
ソルトと反復は、initialize() メソッド内で実行できるのに、encrypt メソッドが呼び出されている間だけ使用されるのはなぜですか?
違いは何ですか?
上記の実装により、繰り返し回数が増えると、encrypt() および decrypt() 操作が遅くなるため、この質問を提起しています。
前もって感謝します。