我不断收到异常“ javax.crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是8的倍数”。我在Google周围搜索了一下,发现我需要使用此算法“ 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 = 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();
}
}