EDIT: для тех, кто просит просмотреть все методы / классы
У меня есть класс Encrypter, который создает IVParameterSpec в конструкторе, кодирует IVParameterSpec в методе Encoder и возвращает IVParameterSpec в методе GetIV.
Это класс Encrypter
public class Encrypter
{
public IVParameterSpec ctr_iv;
public Encrypter(int keylength)
{
//ctr_iv is created in this constructor
byte [] counter = new byte[16];
ctr_iv = new IvParameterSpec(counter);
System.out.println("The iv is " + ctr_iv);
}
public String Encoder()
{
String encoded_IV = Base64.getEncoder().encodeToString(ctr_iv.getIV());
return encoded_IV;
}
public IvParameterSpec getIV()
{
return ctr_iv;
}
}
У меня есть класс Decrypter, который декодирует IVParameterSpec в конструкторе и возвращает IVParameterSpec в методе GetIV.
public class Decrypter
{
IvParameterSpec retrieved_iv;
public Decrypter(String iv)
{
byte [] decodedIV = Base64.getDecoder().decode(iv);
retrieved_iv = new IvParameterSpec(decodedIV);
System.out.println("The iv in this class is " + retrieved_iv);
}
public IvParameterSpec getIV()
{
return retrieved_iv;
}
}
Моя цель - убедиться, что retrieved_iv в классе Decryptor равен ctr_iv в классе Encrypter.Сначала я думал, что конструкторы, приведенные выше, справятся с задачей.Но когда я проверил их значения на равенство, я обнаружил, что они не равны.Вот как я их тестировал:
public class Main
{
public static void main(String [] args)
{
Encrypter encrypter = new Encrypter(); //Initializes ctr_iv
Decrypter decrypter = new Decrypter(encrypter.Encoder()); //Encodes ctr_iv in first object and passes it as an argument to the constructor of the 2nd object
if(encrypter.GetIV().equals(decrypter.GetIV()))
{
System.out.println("IV's are equal");
}else{System.out.println("IV's are not equal");}
}
}
У меня такое ощущение, что это как-то связано с тем, как я декодирую строку в конструкторе Decrypter.