Remove \r and \n from AES encrypted string
Solution 1
Actually,I was using apache commons-codec-1.4.0.jar to encode the string. Changing it to higher version solves the issue. The behaviour of encodeBase64String method has been changed from multi-line chunking (commons-codec-1.4) to single-line non-chunking (commons-codec-1.5).
Please follow the link for more details. http://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base64.html
Solution 2
Adding
Base64.encodeBase64String(hashPassword,Base64.NO_WRAP)
removes the \n.
By default it uses Base64.DEFAULT
which adds newline.
click here: source
click here: Main source
Solution 3
It seems like the base64 encoding standard requires that there is a line break at least every 75 characters. My guess is that the base64 encoding function is adding this automatically, you haven't done anything wrong, and that it's fine to leave it in or remove it. According to the link below, base64 decoding functions should ignore line breaks, so whether you remove it or not is up to you...
See here for someone else who's run into this problem, and a quote from the base64 standard: http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2001AprJun/0183.html
user3244519
Updated on June 13, 2022Comments
-
user3244519 almost 2 years
I am encrypting a string using AES but the encrypted string contains
\n
and\r
at the end.public class AESImpl { private static String decryptedString; private static String encryptedString; public static void main(String[] args) throws NoSuchAlgorithmException, IOException, ClassNotFoundException { String strToEncrypt = "This text has to be encrypted"; SecretKey secretKey = generateSecretKey(); String encryptStr = encrypt(strToEncrypt, secretKey); System.out.println("Encrypted String : " + encryptStr + "It should not come in new line"); String decryptStr = decrypt(encryptStr, secretKey); System.out.println("Decrypted String : " + decryptStr); } private static SecretKey generateSecretKey() throws NoSuchAlgorithmException, IOException { KeyGenerator kg = KeyGenerator.getInstance("AES"); kg.init(128); SecretKey sk = kg.generateKey(); String secretKey = String.valueOf(Hex.encodeHex(sk.getEncoded())); System.out.println("Secret key is " + secretKey); return sk; } public static String encrypt(String strToEncrypt, SecretKey secretKey) { try { Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); encryptedString = new String(Base64.encodeBase64String(cipher.doFinal(strToEncrypt.getBytes()))); } catch (Exception e) { System.out.println("Error while encrypting: " + e.toString()); } return encryptedString; } public static String decrypt(String strToDecrypt, SecretKey secretKey) { try { Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); cipher.init(Cipher.DECRYPT_MODE, secretKey); decryptedString = new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt))); } catch (Exception e) { System.out.println("Error while decrypting: " + e.toString()); } return decryptedString; } }
Output
Secret key is 2df36561b09370637d35b4a310617e60 Encrypted String : TUDUORnWtsZFJAhBw1fYMF9CFExb/tSsLeDx++cpupI= It should not come in new line Decrypted String : This text has to be encrypted
Actually, the encrypted string is
TUDUORnWtsZFJAhBw1fYMF9CFExb/tSsLeDx++cpupI=/r/n
. Do I need to explicitly replace the\r
and\n
from encrypted string or I have done something wrong in the above code?