Я получаю исключение "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();
}
}