Base 64 kodlama ve kod çözme örnek kodu


214

Herkes Base64 kullanarak Base64 bir dize kodunu çözmek ve kodlamak biliyor mu? Aşağıdaki kodu kullanıyorum, ama çalışmıyor.

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
Bunu içe aktarmanız import android.util.Base64;ve ardından ihtiyaçlarınıza göre Base64.encodeToString& kullanmanız Base64.decodegerekir
Zohab Ali

Yanıtlar:


490

İlk:

  • Bir kodlama seçin. UTF-8 genellikle iyi bir seçimdir; her iki tarafta da kesinlikle geçerli olacak bir kodlamaya sadık kalın. UTF-8 veya UTF-16 dışında bir şey kullanmak nadirdir.

İletim sonu:

  • Dizeyi bayt olarak kodlayın (ör. text.getBytes(encodingName))
  • Base64Sınıfı kullanarak baytları base64 olarak kodlayın
  • Baz istasyonunu iletin64

Alma sonu:

  • Baz istasyonunu alma64
  • Base64Sınıfı kullanarak base64 kodunu bayt olarak kodlayın
  • (Örneğin bir dizeye bayt Decode new String(bytes, encodingName))

Yani şöyle bir şey:

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

Veya 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);

Bana çok yardımcı olacak kesin kodu verebilir misiniz. kullanıyorum ama çalışmıyor. Dize kaynağı = "şifre"; byte [] byteArray = source.getBytes ("UTF-16"); Base64 bs = yeni Base64 (); //bs.encodeBytes(byteArray); System.out.println (bs.encodeBytes (byteArray)); //bs.decode(bs.encodeBytes(byteArray)); System.out.println (bs.decode (bs.encodeBytes (byteArray)));
maksimum

9
@max: "İşe yaramıyor", olanların asla iyi bir tanımı değildir. Mesajımı düzenleyeceğim.
Jon Skeet

3
Ayrıca statik yöntemleri örnek yöntemlermiş gibi çağırmamalısınız ...
Jon Skeet

3
eğer böyle koyarsanız çalışacaktır String base64 = Base64.encodeToString (data, Base64.NO_WRAP);
Joy

1
@portfoliobuilder: Kesinlikle hayır. UTF-8Java'da geçerli bir kodlama olduğu garanti edilir: bkz. docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html . Kuşkusuz bugünlerde StandardCharsets.UTF_8bunun yerine belirtirim . Cevabı, karakter setinin varlığından emin olmanız gerektiğini belirtmek için güncelledim, ancak hemen hemen her zaman UTF-8 kullanacağım.
Jon Skeet

18

Kodlanmış bir dizenin kodunun nasıl çözüleceğine ilişkin bilgi ararken burada bulunan herkese Base64.encodeBytes(), işte benim çözümüm:

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

Ayrıca, Android'in eski sürümlerini destekliyorum, bu yüzden http://iharder.net/base64 adresinden Robert Harder'ın Base64 kütüphanesini kullanıyorum


10

İçin Kotlin mb daha iyi kullanmak için:

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

Misal:

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

1
Bu uzantı işlevlerini adlandırmak korkunçtur. EncodeToBase64 veya benzeri bir şey kullanmanızı şiddetle tavsiye ederim.
Rolf ツ

Kesinlikle net ve açık değiller. Söyleyin: "kod çözme" veya "kodlama" ne anlama gelir? Binlerce kod çözme / kodlama algoritması vardır ... Ya Base64 ve Hex'e ihtiyacınız varsa? O zaman yöntemleri nasıl adlandırırsınız?
Rolf ツ

Orada farklı Base64 standartlarından bahsetmiyorum bile.
Rolf ツ

Bu kullanım durumu için açık ve açıktır. Başka bir algoritmaya ihtiyacım varsa, bunu asla uzatma yöntemi olarak kullanmayacağım.
brunql

1
Yine de asgari olarak 'toBase64 ()' ve 'fromBase64 ()' gibi bir şeyi tercih ederim. Bu şekilde, yöntemin ne yapacağını bilmek için herhangi bir belgeyi okumam gerekmiyor. Unutmayın: "kod yazıldığından daha fazla okunur".
Rolf ツ

8

Eğer kullanıyorsanız KOTLIN böyle kullanımı daha

Kodlama için

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

Kod Çözme için

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

3
Veya charset ("UTF-8") yerine Charsets.UTF_8 kullanabilirsiniz.
makovkastar

@makovkastar şimdi onaylayın, şimdi StandardCharsets.UTF_8
Matt

7

gibi bir şey

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
Cevabınız, base64 içindeki şifreleri kodlamanın iyi bir uygulama olduğunu gösterir. Aslında herkes basitçe çözebilir DEĞİLDİR.
Heinrich

2

Şifrelemek için:

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

Şifresini çözmek için:

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

1

Önceki yanıtlara dayanarak, herkesin kullanmak isteyeceği durumlarda aşağıdaki yardımcı yöntemleri kullanıyorum.

    /**
 * @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

'java.util.Base64' sınıfı, bilgileri Base64 biçiminde kodlamak ve kodunu çözmek için işlevsellik sağlar.

Base64 Enkoder nasıl edinilir?

Encoder encoder = Base64.getEncoder();

Base64 Dekoder nasıl alınır?

Decoder decoder = Base64.getDecoder();

Veriler nasıl kodlanır?

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

Verilerin kodu nasıl çözülür?

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

Bu bağlantıdan daha fazla bilgi edinebilirsiniz .


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

Bu kodlamak ve android Studio base64 ile dcode için
Asif Ali

Lütfen yanıtınızı yorumunuzda güncelleyin. Ayrıca Java ve XML'i tek cevapta yayınlayın.
Android

Bazı kodlarla birlikte bazı açıklamalar yazmak her zaman iyi bir uygulamadır. Teşekkürler!
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

kodlayıcı android API byte[]içinBase64String

byte[] data=new byte[];
String Base64encodeString=android.util.Base64.encodeToString(data, android.util.Base64.DEFAULT);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.