web-dev-qa-db-fra.com

nouvelle ligne ajoutant sur ma chaîne cryptée

En 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;
}

Je reçois cette sortie:

encrypt:C66i8K4gFQ23j1jN2sRCqQ==:

Mais quand j'ai implémenté la même chose dans mon application, je reçois le résultat ci-dessous:

encrypt:C66i8K4gFQ23j1jN2sRCqQ==
:

Note: nouvelle ligne s'ajoutant à ma chaîne cryptée.

code de l'application:

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

Comment puis-je supprimer cette nouvelle ligne supplémentaire… .. pourquoi cela est arrivé, aidez-moi s'il vous plaît quelle est la raison? 

42
Rajesh Narravula

Je suis peut-être en retard pour répondre à cette question, mais je rencontre le même problème. En fait, le problème réside ici Base64.encodeBase64String(hashPassword)

Modifiez cette ligne pour qu'elle ressemble à ceci: cela devrait fonctionner: Base64.encodeBase64String(hashPassword,Base64.NO_WRAP)

Par défaut, l'utilitaire Android Base64 ajoute un caractère de nouvelle ligne à la fin de la chaîne codée . L'indicateur Base64.NO_WRAP indique à l'utilitaire de créer la chaîne codée sans le caractère de nouvelle ligne.

Vérifiez ici

142
Dory

Une option plus propre sans rognage:

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

Utilisation:

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

Si quelqu'un en a besoin pour n'importe quelle bibliothèque utilisant OkHttp, il existe une classe Credentials que vous pouvez utiliser pour le codage Base64 de votre nom d'utilisateur/mot de passe.

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

request.header(HttpHeaders.AUTHORIZATION, credentials);
0
sea cat

Cela dépend de la mise en oeuvre de Base64.encodeBase64String(). Quelle est cette méthode?

Si cela vient des Communes Apache, sachez qu'il existe plusieurs classes différentes qui gèrent les espaces différemment. 

Par exemple, org.Apache.commons.net.util.Base64 chunks est généré et ajoute probablement une séquence CR-LF au dernier bloc.

La version la plus courante, org.Apache.commons.codec.binary.Base64 , n’ajoute pas d’espace.

0
erickson