Вы используете NoPadding
, и размер ваших входных данных не должен соответствовать размеру блока шифра, поэтому выдается IllegalBlockSizeException
.Если вы используете NoPadding, вам нужно убедиться, что ваш ввод кратен 8 байтам.
Укажите схему заполнения.Измените на Blowfish/CBC/PKCS5Padding
, и оно должно работать.
Заполнение вручную нулевыми байтами: Создайте новый массив с большим размером, кратным 8, а затем скопируйте в него старый массив.
public static byte[] encrypt(byte encrypt[], byte en_key[]) {
if(encrypt.length % 8 != 0){ //not a multiple of 8
//create a new array with a size which is a multiple of 8
byte[] padded = new byte[encrypt.length + 8 - (encrypt.length % 8)];
//copy the old array into it
System.arraycopy(encrypt, 0, padded, 0, encrypt.length);
encrypt = padded;
}
try {
SecretKeySpec key = new SecretKeySpec(en_key, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(encrypt);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}