I have several libraries, C #, PHP and Android, where they all encrypt / decrypt the string in the same way, so they are all compatible with each other, i.e. c # writes and encrypts the data to the database, and PHP can successfully decrypt and return the original string.
Now I need to do the same with a standard Java application, so I took the code from my Android library and I need libraries, but I get an exception. As far as I know, the code was not specific to Android, so this should not be a problem.
Below is my encryption function
public static String encrypt(String plainPasword) { String password = ""; try { SecretKeySpec key = new SecretKeySpec("hcxilkqbbhczfeultgbskdmaunivmfuo".getBytes("US-ASCII"), "AES"); IvParameterSpec iv = new IvParameterSpec("ryojvlzmdalyglrj".getBytes("US-ASCII")); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); cipher.init(Cipher.ENCRYPT_MODE, key, iv); byte[] encoded = cipher.doFinal(plainPasword.getBytes()); password = new String(Base64.encodeBase64(encoded)); } catch (Exception ex) { System.err.println("Encryption Exception: " + ex.toString()); } return password; }
When I call Encryption.encrypt("myString") , I get the following exception:
Encryption Exception: java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/PKCS7Padding
As I said, this code works great on Android and it doesn't matter where it gets from.
Update
I found that I need PKCS5Padding instead of 7 thanks to the comment link. Now I get the following exception:
Encryption Exception: java.security.InvalidKeyException: Illegal key size
source share