Rajesh Narravula
Rajesh Narravula

Reputation: 1463

new line appending on my encrypted string

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?

Upvotes: 65

Views: 35400

Answers (6)

Sujeet
Sujeet

Reputation: 576

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.

Upvotes: 2

sea cat
sea cat

Reputation: 259

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);

Upvotes: 5

tashuhka
tashuhka

Reputation: 5126

A cleaner option without trimming:

String encryPass = BaseEncoding.base64().encode(hashPassword);

Upvotes: 1

Dory
Dory

Reputation: 7582

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

Upvotes: 212

user2978869
user2978869

Reputation:

Use:

String encryPass = Base64.encodeBase64String(hashPassword).trim();

Upvotes: 3

erickson
erickson

Reputation: 269797

It depends on the implementation of Base64.encodeBase64String(). What is that method?

If it's from Apache commons, be aware that there are a few different classes that handle whitespace differently.

For example, org.apache.commons.net.util.Base64 chunks output, and it probably adds a CR-LF sequence to the final chunk.

The more common version, org.apache.commons.codec.binary.Base64, does not add whitespace.

Upvotes: 0

Related Questions