The following code works when the String value to encrypt/decrypt is non-zero length, but fails when it is an empty string. Is this expected?
//String cleartext = "mytext"; // This works
String cleartext = ""; // This fails
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(1024, new SecureRandom());
KeyPair kp = keyPairGen.generateKeyPair();
byte[] clearBytes = cleartext.getBytes("UTF8");
byte[] cryptBytes = null;
Cipher c = Cipher.getInstance("RSA/ECB/PKCS1Padding");
System.out.println("Using provider: " +c.getProvider().getName());+
+c.init(Cipher.ENCRYPT_MODE, kp.getPublic());+
+cryptBytes = c.doFinal(clearBytes);+
+// Reverse the encryption+
+c.init(Cipher.DECRYPT_MODE, kp.getPrivate());+
+clearBytes = c.doFinal(cryptBytes);+
+String newClearText = new String(clearBytes, "UTF8");+
+System.out.println("Encrypt/decrypt complete, cleartext is \""+newClearText+"\"");
Results are:
Using provider: IBMJCE
javax.crypto.BadPaddingException: Not PKCS#1 block type 2 or Zero padding
at com.ibm.crypto.provider.RSASSL.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(Unknown Source)
...