Reputation: 5636
When trying to understand a problem I faced an interesting problem. The IvParameterSpec class
cannot hold the IV fixed. It changes for every println
.
I am using the javac 10.0.2 version on Ubuntu Linux
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;
public class Encryptor {
public static void main(String[] args) {
IvParameterSpec ctr_iv;
String IV = "0102030405060708";
byte [] counter = IV.getBytes();
ctr_iv = new IvParameterSpec(counter);
System.out.println("ctr_iv = "+ ctr_iv.getIV());
System.out.println("ctr_iv = "+ ctr_iv.getIV());
System.out.println("ctr_iv = "+ ctr_iv.getIV());
System.out.println("ctr_iv = "+ ctr_iv.getIV());
System.out.println("ctr_iv = "+ ctr_iv.getIV());
System.out.println("ctr_iv = "+ ctr_iv.getIV());
}
}
Each of the println
prints different values.
ctr_iv = [B@42f30e0a
ctr_iv = [B@24273305
ctr_iv = [B@5b1d2887
ctr_iv = [B@46f5f779
ctr_iv = [B@1c2c22f3
ctr_iv = [B@18e8568
What is the problem here? Shouldn't the values be the same?
Upvotes: 1
Views: 849
Reputation: 20658
According to the documentation of the method IvParameterSpec.getIV()
:
Returns a new array each time this method is called.
So your assumption that the values should be the same might be true, but it is always a new array.
Upvotes: 1