Beispielcode für Base 64 codieren und decodieren


214

Weiß jemand, wie man einen String in Base64 mit Base64 decodiert und codiert? 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)));

1
Sie müssen dies importieren import android.util.Base64;und können dann Base64.encodeToString& Base64.decodeentsprechend Ihren Anforderungen verwenden
Zohab Ali

Antworten:


490

Zuerst:

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

Sendeende:

  • Kodiere die Zeichenfolge zu Bytes (z text.getBytes(encodingName))
  • Codieren Sie die Bytes mit der Base64Klasse in base64
  • Übertragen Sie die base64

Empfangsende:

  • Erhalte die base64
  • Dekodieren Sie die base64 mithilfe der Base64Klasse in Bytes
  • Dekodieren die Bytes in eine Zeichenfolge (z new String(bytes, encodingName))

Also so etwas 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);

Kannst du mir einen genauen Code geben, der mir sehr helfen würde? Ich benutze, aber es funktioniert nicht. String source = "Passwort"; 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)));
Max

9
@max: "Es funktioniert nicht" ist nie eine gute Beschreibung dessen, was passiert. Wird meinen Beitrag aber bearbeiten.
Jon Skeet

3
Beachten Sie auch, dass Sie statische Methoden nicht so aufrufen sollten, als wären sie Instanzmethoden ...
Jon Skeet

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

1
@portfoliobuilder: Auf keinen Fall. UTF-8ist garantiert eine gültige Codierung in Java: siehe docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html . Zugegeben, heutzutage würde ich StandardCharsets.UTF_8stattdessen angeben . Ich habe die Antwort aktualisiert, um anzugeben, dass Sie sich auf das Vorhandensein des Zeichensatzes verlassen können, aber ich würde so ziemlich immer UTF-8 verwenden.
Jon Skeet

18

Für alle anderen, die hier gelandet sind, als sie nach Informationen zum Dekodieren eines mit codierten Strings gesucht haben Base64.encodeBytes(), war hier 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 Android-Versionen, sodass ich die Base64-Bibliothek von Robert Harder von http://iharder.net/base64 verwende


10

Für Kotlin mb besser 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())

1
Die Benennung dieser Erweiterungsfunktionen ist schrecklich. Ich würde die Verwendung von encodeToBase64 oder ähnlichem sehr empfehlen.
Rolf ツ

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

Ganz zu schweigen von den verschiedenen Base64-Standards.
Rolf ツ

Klar und offensichtlich für diesen Anwendungsfall. Wenn ich einen anderen Algorithmus brauche, werde ich ihn niemals als Erweiterungsmethode verwenden.
Brunql

1
Trotzdem würde ich mindestens so etwas wie 'toBase64 ()' und 'fromBase64 ()' bevorzugen. Auf diese Weise muss ich keine Dokumentation lesen, um zu wissen, wie die Methode funktioniert. Denken Sie daran: "Code wird mehr gelesen als geschrieben".
Rolf

8

Wenn Sie Kotlin verwenden, verwenden Sie es wie folgt

Für Encode

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

3
Oder Sie können Charsets.UTF_8 anstelle von charset ("UTF-8") verwenden.
Makovkastar

@makovkastar nur bestätigen, jetzt StandardCharsets.UTF_8
Matt

7

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

5
Ihre Antwort impliziert, dass das Codieren von Passwörtern in base64 eine gute Vorgehensweise ist. Tatsächlich ist es NICHT so, wie es jeder einfach dekodieren kann.
Heinrich

2

So verschlüsseln Sie:

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

So entschlüsseln Sie:

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

1

Basierend auf den vorherigen Antworten verwende ich die folgenden Dienstprogrammmethoden, falls jemand sie verwenden möchte.

    /**
 * @param message the message to be encoded
 *
 * @return the enooded from of the message
 */
public static String toBase64(String message) {
    byte[] data;
    try {
        data = message.getBytes("UTF-8");
        String base64Sms = Base64.encodeToString(data, Base64.DEFAULT);
        return base64Sms;
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    return null;
}

/**
 * @param message the encoded message
 *
 * @return the decoded message
 */
public static String fromBase64(String message) {
    byte[] data = Base64.decode(message, Base64.DEFAULT);
    try {
        return new String(data, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    return null;
}


0

Die Klasse 'java.util.Base64' bietet Funktionen zum Codieren und Decodieren der Informationen im Base64-Format.

Wie bekomme ich Base64 Encoder?

Encoder encoder = Base64.getEncoder();

Wie bekomme ich Base64 Decoder?

Decoder decoder = Base64.getDecoder();

Wie verschlüssele ich die Daten?

Encoder encoder = Base64.getEncoder();
String originalData = "java";
byte[] encodedBytes = encoder.encode(originalData.getBytes());

Wie dekodiere ich die Daten?

Decoder decoder = Base64.getDecoder();
byte[] decodedBytes = decoder.decode(encodedBytes);
String decodedStr = new String(decodedBytes);

Weitere Informationen erhalten Sie unter diesem Link .


-1
    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".BaseActivity">
   <EditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/edt"
       android:paddingTop="30dp"
       />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv1"
        android:text="Encode"
        android:textSize="20dp"
        android:padding="20dp"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv2"

        android:textSize="20dp"
        android:padding="20dp"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv3"
        android:text="decode"
        android:textSize="20dp"
        android:padding="20dp"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv4"
        android:textSize="20dp"
        android:padding="20dp"


        />
</LinearLayout>

Dies ist für die Codierung und Codierung über base64 in Android Studio
Asif Ali

Bitte aktualisieren Sie Ihren Kommentar als Antwort. Veröffentlichen Sie auch Java und XML in einer einzigen Antwort.
Android

Das Schreiben einer Erklärung zusammen mit etwas Code ist immer eine gute Praxis. Vielen Dank!
surajs1n

-1
package net.itempire.virtualapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class BaseActivity extends AppCompatActivity {
EditText editText;
TextView textView;
TextView textView2;
TextView textView3;
TextView textView4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
        editText=(EditText)findViewById(R.id.edt);
        textView=(TextView) findViewById(R.id.tv1);
        textView2=(TextView) findViewById(R.id.tv2);
        textView3=(TextView) findViewById(R.id.tv3);
        textView4=(TextView) findViewById(R.id.tv4);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
             textView2.setText(Base64.encodeToString(editText.getText().toString().getBytes(),Base64.DEFAULT));
            }
        });

        textView3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView4.setText(new String(Base64.decode(textView2.getText().toString(),Base64.DEFAULT)));

            }
        });


    }
}

-2

für Android API byte[] zu Base64StringEncoder

byte[] data=new byte[];
String Base64encodeString=android.util.Base64.encodeToString(data, android.util.Base64.DEFAULT);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.