2

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 として渡されます。

質問は

  1. ソルトと反復は、initialize() メソッド内で実行できるのに、encrypt メソッドが呼び出されている間だけ使用されるのはなぜですか?

  2. 違いは何ですか?

上記の実装により、繰り返し回数が増えると、encrypt() および decrypt() 操作が遅くなるため、この質問を提起しています。

前もって感謝します。

4

1 に答える 1