Как получить IVParameterSpec после декодирования base64? - PullRequest
0 голосов
/ 23 ноября 2018

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.

1 Ответ

0 голосов
/ 23 ноября 2018

Сравните по 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");
}
...