Triple DES Расшифровка: режим ECB не может использовать IV - PullRequest
0 голосов
/ 29 апреля 2020

У меня на сервере Java код для расшифровки данных, которые я пытаюсь запустить локально для некоторого тестирования. Код отлично работает на сервере, но выдает ошибку в моей локальной сборке.

Режим ECB не может использовать IV

    public static String triple_des_decrypt(String key, String data)
    {
        try
        {
            //needs to have an even number of digits
            if (key.length() % 2 == 1)
            {
                key = "0" + key;
            }
            byte[] desKey = Hex.decodeHex(key.toCharArray());

            // pad out key for cipher routine
            int deskeyLength = desKey.length;
            byte[] desKey24 = new byte[24];

            int copySize = 16;
            if (copySize > deskeyLength)
            {
                copySize = deskeyLength;
            }
            System.arraycopy(desKey, 0, desKey24, 0, copySize);

            copySize = 8;
            if (copySize > deskeyLength)
            {
                copySize = deskeyLength;
            }
            System.arraycopy(desKey, 0, desKey24, 16, 8);

            DESedeKeySpec keySpec = new DESedeKeySpec(desKey24);
            Cipher cipher = Cipher.getInstance("DESede/ECB/NoPadding");
            String algo = "DESede";


            SecretKey secretKey = SecretKeyFactory.getInstance(algo).generateSecret(keySpec); 
            IvParameterSpec iv = new IvParameterSpec(new byte[8]);
            cipher.init(Cipher.DECRYPT_MODE, secretKey, iv); //Error thrown here
            byte[] byteData = Hex.decodeHex(data.toCharArray());
            byte[] decryptedData = cipher.doFinal(byteData);

            char tempString[] = Hex.encodeHex(decryptedData);
            String decryptedString = new String(tempString).toUpperCase();
            return decryptedString;
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
    }

Я не знаком с шифрованием, и я не знаю, почему выдается эта ошибка.

Редактировать Удаление параметра IV из cipher.init устраняет проблему, но мне все еще любопытно, почему в другой среде не выдается ошибка.

1 Ответ

0 голосов
/ 29 апреля 2020

ECB не выполняет связывание между блоками, поэтому невозможно использовать вектор инициализации ( wiki ). Таким образом, вы получаете сообщение об ошибке, что режим ECB не может использовать IV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...