new line appending on my encrypted string

32,886

Solution 1

I may be late in answering this, but came across with same problem. Actually problem lies here Base64.encodeBase64String(hashPassword)

Change that line to look like this it should work: Base64.encodeBase64String(hashPassword,Base64.NO_WRAP)

By default the Android Base64 util adds a newline character to the end of the encoded string. The Base64.NO_WRAP flag tells the util to create the encoded string without the newline character.

Check here

Solution 2

In case anyone needs this for any libraries using OkHttp, there's a Credentials class you can use for Base64 encoding your username/pass

String credentials = Credentials.basic("username", "password");

request.header(HttpHeaders.AUTHORIZATION, credentials);

Solution 3

You just need to Use Base64 encoding in following way

Base64.encodeBase64String("Your data to encrypt in base64", Base64.DEFAULT)

Change above line with the followings

Base64.encodeBase64String("Your data to encrypt in base64",Base64.NO_WRAP)

It worked for me.

Solution 4

A cleaner option without trimming:

String encryPass = BaseEncoding.base64().encode(hashPassword);
Share:
32,886
Rajesh Narravula
Author by

Rajesh Narravula

Java Professional

Updated on September 10, 2020

Comments

  • Rajesh Narravula
    Rajesh Narravula over 3 years

    In Main:

    public static void main(String[] args) throws NoSuchAlgorithmException {
        System.out.println("encrypt:" + encryptPassword("superuser")+":" );
    }
    
    public static String encryptPassword(final String password) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] hashPassword = md.digest(password.getBytes());
        String encryPass = Base64.encodeBase64String(hashPassword);
        return encryPass;
    }
    

    I'm getting this output:

    encrypt:C66i8K4gFQ23j1jN2sRCqQ==:
    

    But when I implemented the same thing in my application I'm getting the output below:

    encrypt:C66i8K4gFQ23j1jN2sRCqQ==
    :
    

    Note: new line appending on my encrypted string.

    application code:

    public boolean authenticateUsernamePasswordInternal(UsernamePasswordCredentials credentials) {
        try {
            System.out.println("encrypt:" + getHash("superuser")+":" );
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            throw new BadCredentialsAuthenticationException(ErrorConstants.CONNECTION_FAILED);
        }
    }
    
    private String getHash(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{  
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] hashPassword = md.digest(password.getBytes());
        String encryPass = Base64.encodeBase64String(hashPassword);
        return encryPass;
    }
    

    How I can remove that extra new line. why this is happened, please help me what is the reason?