如何在 base64 解码后检索 IVParameterSpec?
How do I retrieve an IVParameterSpec after base64 decode?
编辑:对于那些要求查看整个 methods/classes
的人
我有一个 class 加密器,它在构造函数中创建一个 IVParameterSpec,在 Encoder 方法中对 IVParameterSpec 进行编码,returns 在 GetIV 方法中对 IVParameterSpec 进行编码。
这是加密器class
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;
}
}
我有一个 class 解码器,它解码构造函数中的 IVParameterSpec 和 returns 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;
}
}
我的目标是确保解密器 class 中的 retrieved_iv 等于加密器 class 中的 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 构造函数中解码字符串的方式有关。
比较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");
}
编辑:对于那些要求查看整个 methods/classes
的人我有一个 class 加密器,它在构造函数中创建一个 IVParameterSpec,在 Encoder 方法中对 IVParameterSpec 进行编码,returns 在 GetIV 方法中对 IVParameterSpec 进行编码。
这是加密器class
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;
}
}
我有一个 class 解码器,它解码构造函数中的 IVParameterSpec 和 returns 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;
}
}
我的目标是确保解密器 class 中的 retrieved_iv 等于加密器 class 中的 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 构造函数中解码字符串的方式有关。
比较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");
}