Получение исключений заполнения, хотя я использую алгоритм заполнения - PullRequest
0 голосов
/ 17 октября 2019

Я получаю исключение "javax.crypto.IllegalBlockSizeException: длина ввода должна быть кратна 8 при расшифровке с использованием шифра с добавлением" И я немного погуглил и обнаружил, что мне нужно использовать этот алгоритм "Blowfish / ECB/ PKCS5Padding ";" как в шифровании, так и в дешифровании для заполнения, поскольку оно должно быть кратным 8, но проблема все еще возникает. Я шифрую некоторые данные, затем сериализую их, а затем десериализую и начинаюЯ думаю, что с шифрованием что-то не так? Но каждый раз, когда я шифрую, я не получаю никаких исключений.

Я пытался использовать метод IVspec, но так как я использую ECB, я получаю исключение, говорящее, что я не долженне используйте этот метод. Это код для расшифровки кода

    try {

        cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding"); // algoritm som används
        cipher.init(Cipher.DECRYPT_MODE, secretKey); // väljer att man ska dekryptera

        FileInputStream fs = new FileInputStream(encryptedData);

        int numberOfByteRead;
        CipherInputStream in = new CipherInputStream(fs, cipher);

        in.read(data);

        decryptedDataOut = cipher.doFinal(data); //enkrypterade datan blir dekrypterad
        in.close();
    } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException  | IOException   e) {
        e.printStackTrace();
    } 

И этот код для шифрования и его сериализации. Cipher cipher = null;

    try {
        cipher = Cipher.getInstance(algorithm); // Krypterar med blowfish
        cipher.init(Cipher.ENCRYPT_MODE, secretKey); // krypterar
        out = cipher.doFinal(in.getBytes()); // krypterar datan i strängen in

    } catch (InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException | IllegalBlockSizeException | BadPaddingException   e) {
        e.printStackTrace();
    }

    try { // Skriver den krypterade datan till en ny fil med namnet på encryptedData


        FileOutputStream fs = new FileOutputStream(encryptedData);

        CipherOutputStream output = new CipherOutputStream(fs, cipher);
        output.write(out);
        output.flush();
        output.close();



        System.out.println("Encrypted \"" + data + "\" to file " + encryptedData);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } 
    }
...