web-dev-qa-db-fra.com

Base 64 encoder et décoder exemple de code

Quelqu'un sait-il comment décoder et encoder une chaîne en Base64 à l'aide de Base64? J'utilise le code suivant, mais cela ne fonctionne pas.

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

Premier:

  • Choisissez un encodage. UTF-8 est généralement un bon choix. s'en tenir à un encodage qui sera définitivement valable des deux côtés. Il serait rare d'utiliser autre chose que UTF-8 ou UTF-16.

Fin de transmission:

  • Encoder la chaîne en octets (par exemple, text.getBytes(encodingName))
  • Encodez les octets en base64 à l'aide de la classe Base64
  • Transmettre le base64

Destinataire:

  • Recevoir le base64
  • Décoder le base64 en octets à l'aide de la classe Base64
  • Décoder les octets en chaîne (par exemple, new String(bytes, encodingName))

Donc, quelque chose comme:

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

Ou avec 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);
418
Jon Skeet

Pour tous ceux qui se sont retrouvés ici en cherchant des informations sur le décodage d'une chaîne encodée avec Base64.encodeBytes(), voici ma solution:

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

De plus, comme je supporte les anciennes versions d’Android, j’utilise donc la bibliothèque Base64 de Robert Harder à partir de http://iharder.net/base64

16
Dunfield

quelque chose comme 

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

Si vous utilisez Kotlin than use like this

Pour encoder

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

Pour décoder

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

Pour Kotlin mb, mieux vaut utiliser ceci:

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

Exemple:

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

Pour chiffrer: 

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

Décrypter:

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

Sur la base des réponses précédentes, j'utilise les méthodes utilitaires suivantes au cas où quelqu'un souhaiterait l'utiliser.

    /**
 * @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;
}
1
Szabolcs Becze
    <?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>
0
Asif Ali
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)));

            }
        });


    }
}
0
Asif Ali

Pour API niveau 26+

String encodedString = Base64.getEncoder().encodeToString(byteArray);

Réf.: https://developer.Android.com/reference/Java/util/Base64.Encoder.html#encodeToString (byte [])

0
Fung LAM