【发布时间】:2015-05-16 07:32:28
【问题描述】:
我正在尝试使用“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 加密扩展 (JCE),但它不适用于 1 位的 CFB 密码模式。我需要将“AES”算法与密码模式“CFB 1-bit”一起使用。它适用于密码模式“CFB 8-bits”和“CFB 128-bits”。
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;
}
【问题讨论】:
-
也许你的 dataBytes.length == 0
-
@puj 我设置了一个长度大于“0”的有效字符串。
标签: java algorithm encryption bouncycastle jce