编辑:对于那些要求查看整个方法/类的人
我有一个Encrypter类,它在构造函数中创建IVParameterSpec,使用Encoder方法对IVParameterSpec进行编码,并在GetIV方法中返回IVParameterSpec。
这是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;
}
}
我有一个解密器类,它在构造函数中解码IVParameterSpec并在GetIV方法中返回IVParameterSpec。
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;
}
}
我的目的是确保Decryptor类中的restored_iv等于Encrypter类中的ctr_iv。我最初以为上面的构造函数可以解决问题。但是,当我测试它们的价值观是否平等时,我发现它们并不平等。这就是我测试它们的方式:
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构造函数中解码字符串的方式有关。
答案 0 :(得分:3)
按Arrays.equals进行比较。
if(Arrays.equals(ctr_iv.getIV(),retrieved_iv.getIV())) {
System.out.println("IV's are equal");
} else {
System.out.println("IV's are not equal");
}