Я пытаюсь создать алгоритм шифрования с использованием «AES/CFB1/PKCS5Padding» (поставщик BouncyCastle), но возникает исключение ArithmeticException:
java.lang.ArithmeticException: / нулем в org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher.getOutputSize(неизвестный источник) в org.bouncycastle.jce.provider.JCEBlockCipher$BufferedGenericBlockCipher.getOutputSize(неизвестный источник) в org.bouncycastle.jce. provider.JCEBlockCipher.engineGetOutputSize (неизвестный источник) в org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal (неизвестный источник) в javax.crypto.Cipher.doFinal (Cipher.java:2087)
Я только что попытался использовать расширение Java Cryptography Extension (JCE) по умолчанию, но оно не работает с режимом шифрования CFB с 1-битным. Мне нужно использовать алгоритм «AES» с режимом шифрования «CFB 1-bit». Он отлично работает с режимом шифрования «CFB 8-бит» и «CFB 128-бит».
private static String buildCipherEncryptCheck(String data){
byte[] dataBytes = data.getBytes();
String encryptedData = null;
try {
// Generate valid key
KeyGenerator keygenerator = KeyGenerator.getInstance("AES");
keygenerator.init(128);
SecretKey myKey = keygenerator.generateKey();
// Generate cipher encrypt
Cipher cipher = Cipher.getInstance("AES/CFB1/PKCS5Padding", new BouncyCastleProvider());
// Initialize the cipher for encryption
cipher.init(Cipher.ENCRYPT_MODE, myKey);
// Encrypt the text
byte[] textEncrypted = cipher.doFinal(dataBytes);
encryptedData = new String(Base64.encode(textEncrypted));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return encryptedData;
}