Weiß jemand, wie man eine Zeichenfolge in Base64 mit Base64 decodiert und codiert?

Lesezeit: 5 Minuten

Benutzeravatar von max
max

Ich verwende den folgenden Code, aber er funktioniert nicht.

String source = "password"; 
byte[] byteArray = source.getBytes("UTF-16"); 
Base64 bs = new Base64(); 
//bs.encodeBytes(byteArray); 
System.out.println(bs.encodeBytes(byteArray)); 
//bs.decode(bs.encodeBytes(byteArray));
System.out.println(bs.decode(bs.encodeBytes(byteArray)));

  • Diese müssen Sie importieren import android.util.Base64; und dann verwenden können Base64.encodeToString & Base64.decode nach Ihren Bedürfnissen

    – Zohab Ali

    8. Dezember 2018 um 10:10 Uhr

Benutzeravatar von Jon Skeet
Jon Skeet

Zuerst:

  • Wählen Sie eine Codierung. UTF-8 ist im Allgemeinen eine gute Wahl; Halten Sie sich an eine Verschlüsselung, die auf jeden Fall auf beiden Seiten gültig ist. Es wäre selten, etwas anderes als UTF-8 oder UTF-16 zu verwenden.

Sendeende:

  • Codieren Sie die Zeichenfolge in Bytes (z text.getBytes(encodingName))
  • Codieren Sie die Bytes mithilfe von base64 Base64 Klasse
  • Übertragen Sie die base64

Empfangsende:

  • Erhalten Sie die base64
  • Decodieren Sie base64 mithilfe von in Bytes Base64 Klasse
  • Decodieren Sie die Bytes in eine Zeichenfolge (z new String(bytes, encodingName))

Also sowas wie:

// Sending side
byte[] data = text.getBytes("UTF-8");
String base64 = Base64.encodeToString(data, Base64.DEFAULT);

// Receiving side
byte[] data = Base64.decode(base64, Base64.DEFAULT);
String text = new String(data, "UTF-8");

Oder mit StandardCharsets:

// Sending side
byte[] data = text.getBytes(StandardCharsets.UTF_8);
String base64 = Base64.encodeToString(data, Base64.DEFAULT);

// Receiving side
byte[] data = Base64.decode(base64, Base64.DEFAULT);
String text = new String(data, StandardCharsets.UTF_8);

  • @max: “Es funktioniert nicht” ist nie eine gute Beschreibung dessen, was passiert. Werde meinen Beitrag aber editieren.

    – Jon Skeet

    9. September 2011 um 12:23 Uhr

  • Beachten Sie auch, dass Sie statische Methoden nicht so aufrufen sollten, als wären sie Instanzmethoden …

    – Jon Skeet

    9. September 2011 um 12:25 Uhr

  • Wenn Sie es so ausdrücken, funktioniert es. String base64 = Base64.encodeToString (data, Base64.NO_WRAP);

    – Freude

    8. Oktober 2013 um 14:20 Uhr

  • @portfoliobuilder: Absolut nicht. UTF-8 ist garantiert eine gültige Kodierung in Java: siehe docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html. Zugegeben, heutzutage würde ich angeben StandardCharsets.UTF_8 stattdessen. Ich habe die Antwort aktualisiert, um anzugeben, dass Sie sich auf das Vorhandensein des Zeichensatzes verlassen sollten, aber ich würde es ziemlich tun stets Verwenden Sie UTF-8.

    – Jon Skeet

    3. Januar 2017 um 18:37 Uhr


  • Wenn ich Base64.DEFAULT verwende, sagt es schlechtes base64. Verwenden Sie also Base64.URL_SAFE und genießen Sie

    – Android-Hilfe

    12. Mai 2017 um 7:26 Uhr

Zum Kotlin mb besser, dies zu verwenden:

fun String.decode(): String {
    return Base64.decode(this, Base64.DEFAULT).toString(charset("UTF-8"))
}

fun String.encode(): String {
    return Base64.encodeToString(this.toByteArray(charset("UTF-8")), Base64.DEFAULT)
}

Beispiel:

Log.d("LOGIN", "TEST")
Log.d("LOGIN", "TEST".encode())
Log.d("LOGIN", "TEST".encode().decode())

  • Die Benennung dieser Erweiterungsfunktionen ist schrecklich. Ich würde wärmstens empfehlen, encodeToBase64 oder etwas Ähnliches zu verwenden.

    – Rolf ツ

    14. November 2018 um 10:59 Uhr

  • Sie sind absolut nicht klar und offensichtlich. Sag mir: Was bedeutet “dekodieren” oder “kodieren”? Es gibt Tausende von Dekodierungs-/Kodierungsalgorithmen … Was ist, wenn Sie Base64 und Hex benötigen? Wie würden Sie die Methoden dann benennen?

    – Rolf ツ

    15. November 2018 um 11:25 Uhr


  • Trotzdem würde ich so etwas bevorzugen wie: ‘toBase64()’ und ‘fromBase64()’ als Minimum. Auf diese Weise muss ich keine Dokumentation lesen, um zu wissen, was die Methode tun wird. Denken Sie daran: “Code wird mehr gelesen als geschrieben”.

    – Rolf ツ

    15. November 2018 um 11:30 Uhr

  • Ja, wenn ich Codierung und Algorithmus hervorheben möchte, werde ich es wie toBase64UTF8 () nennen, aber ich brauche es nicht, einfach ist besser. Namensgebung ist eines der Hauptprobleme in der Entwicklung. Bitte stimmen Sie bei dieser Antwort ab und wir schließen diese Diskussion, danke.

    – brunql

    15. November 2018 um 11:39 Uhr

  • So viel Aufhebens um ein Beispiel 🙂

    – Simas

    15. November 2018 um 20:04 Uhr

Benutzeravatar von Dunfield
Dunfield

An alle anderen, die hier gelandet sind, als sie nach Informationen darüber gesucht haben, wie man eine mit codierte Zeichenfolge decodiert Base64.encodeBytes()hier war meine Lösung:

// encode
String ps = "techPass";
String tmp = Base64.encodeBytes(ps.getBytes());

// decode
String ps2 = "dGVjaFBhC3M=";
byte[] tmp2 = Base64.decode(ps2); 
String val2 = new String(tmp2, "UTF-8"); 

Außerdem unterstütze ich ältere Versionen von Android, daher verwende ich die Base64-Bibliothek von Robert Harder http://iharder.net/base64

Wenn Sie verwenden Kotlin als so zu verwenden

Zum Codieren

val password = "Here Your String"
val data = password.toByteArray(charset("UTF-8"))
val base64 = Base64.encodeToString(data, Base64.DEFAULT)

Zum Dekodieren

val datasd = Base64.decode(base64, Base64.DEFAULT)
val text = String(datasd, charset("UTF-8"))

Benutzeravatar von DonGru
DonGru

etwas wie

String source = "password"; 
byte[] byteArray;
try {
    byteArray = source.getBytes("UTF-16");
    System.out.println(new String(Base64.decode(Base64.encode(byteArray,
           Base64.DEFAULT), Base64.DEFAULT)));
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

  • Ihre Antwort impliziert, dass das Codieren von Passwörtern in base64 eine gute Praxis ist. Tatsächlich ist es NICHT so, wie es jeder einfach entschlüsseln kann.

    – Jan Heinrich Reimer

    9. Juni 2016 um 17:41 Uhr

Benutzeravatar von Ramesh R
Ramesh R

Zum Verschlüsseln:

byte[] encrpt= text.getBytes("UTF-8");
String base64 = Base64.encodeToString(encrpt, Base64.DEFAULT);

Zum Entschlüsseln:

byte[] decrypt= Base64.decode(base64, Base64.DEFAULT);
String text = new String(decrypt, "UTF-8");

  • Ihre Antwort impliziert, dass das Codieren von Passwörtern in base64 eine gute Praxis ist. Tatsächlich ist es NICHT so, wie es jeder einfach entschlüsseln kann.

    – Jan Heinrich Reimer

    9. Juni 2016 um 17:41 Uhr

Benutzeravatar von Ramesh R
Ramesh R

Über vielen Antworten, die für mich nicht funktionieren, und einige von ihnen sind keine Ausnahmebehandlung auf die richtige Weise. Hier füge ich eine perfekte Lösung hinzu, die für mich, sicher auch für Sie, erstaunlich funktioniert.

//base64 decode string 
 String s = "ewoic2VydmVyIjoic2cuenhjLmx1IiwKInNuaSI6InRlc3RpbmciLAoidXNlcm5hbWUiOiJ0ZXN0
    ZXIiLAoicGFzc3dvcmQiOiJ0ZXN0ZXIiLAoicG9ydCI6IjQ0MyIKfQ==";
    String val = a(s) ;
     Toast.makeText(this, ""+val, Toast.LENGTH_SHORT).show();
    
       public static String a(String str) {
             try {
                 return new String(Base64.decode(str, 0), "UTF-8");
             } catch (UnsupportedEncodingException | IllegalArgumentException unused) {
                 return "This is not a base64 data";
             }
         }

1422080cookie-checkWeiß jemand, wie man eine Zeichenfolge in Base64 mit Base64 decodiert und codiert?

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

Privacy policy