neue Zeile, die an meine verschlüsselte Zeichenfolge angehängt wird

Lesezeit: 3 Minuten

Benutzer-Avatar
Rajesh Narravula

Im Hauptteil:

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

Ich bekomme diese Ausgabe:

encrypt:C66i8K4gFQ23j1jN2sRCqQ==:

Aber wenn ich dasselbe in meiner Anwendung implementiert habe, erhalte ich die folgende Ausgabe:

encrypt:C66i8K4gFQ23j1jN2sRCqQ==
:

Notiz: neue Zeile, die an meine verschlüsselte Zeichenfolge angehängt wird.

Anwendungscode:

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

Wie kann ich diese zusätzliche neue Zeile entfernen? Warum das passiert ist, bitte helfen Sie mir was ist der Grund?

  • Wo ist Ihr neuer Zeilenabstand?

    – Masul

    18. November 2013 um 5:17 Uhr

  • welcher zusätzliche neue Zeilenabstand?? können Sie bitte klar sein

    – Kamlesh Arya

    18. November 2013 um 5:20 Uhr


  • Machen Sie einfach encyPass.replaceAll(“\n”,””), es wird richtig sein

    – Houcem Berrayana

    18. November 2013 um 5:21 Uhr

  • Über der “Notiz” -Ausgabe habe ich meine Ausgabe eingefügt, kommt aber als Leerzeichen

    – Rajesh Narravula

    18. November 2013 um 5:21 Uhr

  • Bitte achten Sie mehr auf die Formatierung Ihres Codes. Sie scheinen nicht einmal den vollständigen Code eingefügt zu haben – Ihre Methode authenticateUsernamePasswordInternal hat keine schließende Klammer. Verwenden Sie außerdem Leerzeichen statt Tabulatoren in Stack Overflow.

    – Jon Skeet

    18. November 2013 um 5:22 Uhr

Ich kann spät mit der Beantwortung dieser Frage sein, bin aber auf das gleiche Problem gestoßen. Eigentlich liegt hier das Problem
Base64.encodeBase64String(hashPassword)

Ändern Sie diese Zeile so, dass sie funktionieren sollte:
Base64.encodeBase64String(hashPassword,Base64.NO_WRAP)

Standardmäßig fügt das Android Base64-Dienstprogramm ein Zeilenumbruchzeichen am Ende der codierten Zeichenfolge hinzu. Das Base64.NO_WRAP-Flag weist das Dienstprogramm an, die codierte Zeichenfolge ohne das Zeilenumbruchzeichen zu erstellen.

Prüfen hier

  • Willkommen, das Trimmen von Text wird nicht immer korrekt ausgegeben. Es hat mir nicht gegeben, also versuchen Sie andere Optionen und haben Sie eine Lösung gefunden. 🙂

    – Dori

    30. Juli 2014 um 6:49 Uhr

  • Wenn Sie dies zu spät beantworten, danke, ich bemitleide alle, die dieses Problem hatten, bevor Sie darauf geantwortet haben: D

    – Sridhar Sarnobat

    15. September 2017 um 1:48 Uhr

  • Warum um alles in der Welt werden Zeilenumbrüche eingefügt?

    – Conor Patrick

    22. April 2020 um 20:15 Uhr

  • @ConorPatrick Für alte Programme, die nicht mit langen Zeilen arbeiten. Legacy-Zeug. Imho no_wrap sollte jetzt Standard sein und Wrap sollte ein zusätzliches Bit-Flag sein.

    – JacksOnF1re

    20. April 2021 um 13:25 Uhr


Falls jemand dies für Bibliotheken benötigt, die OkHttp verwenden, gibt es eine Credentials Klasse, die Sie für die Base64-Codierung Ihres Benutzernamens/Passworts verwenden können

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

request.header(HttpHeaders.AUTHORIZATION, credentials);

Verwenden:

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

Sie müssen nur die Base64-Codierung auf folgende Weise verwenden

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

Ändern Sie die obige Zeile wie folgt

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

Es hat für mich funktioniert.

Benutzer-Avatar
Taschuka

Eine sauberere Option ohne Trimmen:

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

Benutzer-Avatar
Erickson

Es kommt auf die Umsetzung an Base64.encodeBase64String(). Was ist das für eine Methode?

Wenn es von Apache Commons stammt, beachten Sie, dass es einige verschiedene Klassen gibt, die Leerzeichen unterschiedlich handhaben.

Zum Beispiel, org.apache.commons.net.util.Base64 Chunks ausgegeben, und es fügt dem letzten Chunk wahrscheinlich eine CR-LF-Sequenz hinzu.

Die gebräuchlichere Variante, org.apache.commons.codec.binary.Base64fügt keine Leerzeichen hinzu.

1093510cookie-checkneue Zeile, die an meine verschlüsselte Zeichenfolge angehängt wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy