बेस 64 एनकोड और डिकोड उदाहरण कोड


214

क्या किसी को पता है कि बेस 64 का उपयोग करके बेस 64 में एक स्ट्रिंग को डीकोड और एनकोड कैसे किया जाता है। मैं निम्नलिखित कोड का उपयोग कर रहा हूं, लेकिन यह काम नहीं कर रहा है।

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
आप इस आयात करना होगा import android.util.Base64;और उसके बाद का उपयोग कर सकते Base64.encodeToStringऔर Base64.decodeअपनी आवश्यकताओं के अनुसार
Zohab अली

जवाबों:


490

प्रथम:

  • एक एन्कोडिंग चुनें। UTF-8 आम तौर पर एक अच्छा विकल्प है; एक एन्कोडिंग के लिए छड़ी जो निश्चित रूप से दोनों पक्षों पर मान्य होगी। UTF-8 या UTF-16 के अलावा कुछ का उपयोग करना दुर्लभ होगा।

संचारण अंत:

  • स्ट्रिंग को बाइट्स तक एनकोड करें (उदाहरण के लिए text.getBytes(encodingName))
  • Base64वर्ग का उपयोग करके बाइट्स को बेस 64 पर एनकोड करें
  • आधार ६४ में संचारित करें

अंत प्राप्त:

  • आधार ६४ प्राप्त करें
  • Base64वर्ग का उपयोग करके बेस 64 को बाइट्स में डिकोड करें
  • बाइट्स को एक स्ट्रिंग में घटाएँ (जैसे new String(bytes, encodingName))

तो कुछ इस तरह:

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

या साथ 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);

क्या आप मुझे सटीक कोड दे सकते हैं जो बहुत मदद करेगा। मैं उपयोग कर रहा हूँ, लेकिन इसका काम नहीं हो रहा है। स्ट्रिंग स्रोत = "पासवर्ड"; बाइट [] byteArray = source.getBytes ("UTF-16"); Base64 bs = नया Base64 (); //bs.encodeBytes(byteArray); System.out.println (bs.encodeBytes (byteArray)); //bs.decode(bs.encodeBytes(byteArray)); Println (bs.decode (bs.encodeBytes (bytearray)));
अधिकतम

9
@ मोम: "यह काम नहीं कर रहा है" क्या हो रहा है इसका अच्छा विवरण कभी नहीं है। हालांकि मेरे पोस्ट को संपादित करेंगे।
जॉन स्कीट

3
यह भी ध्यान दें कि आपको स्टैटिक विधियों को कॉल नहीं करना चाहिए जैसे कि वे इंस्टेंस विधियाँ हैं ...
जॉन स्केट

3
यदि आप इसे इस तरह लगाते हैं कि यह स्ट्रिंग बेस 64 = बेस 64.encodeToString (डेटा, बेस 64.NO_WRAP) पर काम करेगा;
जॉय

1
@portfoliobuilder: बिल्कुल नहीं। UTF-8जावा में एक मान्य एन्कोडिंग होने की गारंटी है: docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html देखें । निश्चित रूप से इन दिनों मैं StandardCharsets.UTF_8इसके बजाय निर्दिष्ट करना चाहते हैं । मैंने यह निर्दिष्ट करने के लिए उत्तर अपडेट किया है कि आपको चारसेट की उपस्थिति में आश्वस्त होना चाहिए, लेकिन मैं बहुत अधिक हमेशा यूटीएफ -8 का उपयोग करता हूं ।
जॉन स्कीट

18

किसी अन्य व्यक्ति के लिए जो एक स्ट्रिंग को डिकोड करने के तरीके के बारे में जानकारी के लिए यहां खोज करता Base64.encodeBytes()था, यहां मेरा समाधान था:

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

इसके अलावा, मैं एंड्रॉइड के पुराने संस्करणों का समर्थन कर रहा हूं, इसलिए मैं http://iharder.net/base64 से रॉबर्ट हार्डर की बेस 64 लाइब्रेरी का उपयोग कर रहा हूं


10

के लिए Kotlin एमबी बेहतर यह उपयोग करने के लिए:

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

उदाहरण:

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

1
इन एक्सटेंशन फ़ंक्शंस के लिए नामकरण भयानक है। मैं अत्यधिक encodeToBase64 या कुछ इसी तरह का उपयोग करने की सलाह दूंगा।
रॉल्फ R

वे बिल्कुल स्पष्ट और स्पष्ट नहीं हैं। मुझे बताएं: "डिकोड" या "एनकोड" का क्या अर्थ है? हजारों डिकोडिंग / एन्कोडिंग एल्गोरिदम हैं ... यदि आपको बेस 64 और हेक्स की आवश्यकता है तो क्या होगा? तब आप कैसे तरीकों का नाम लेंगे?
रॉल्फ R

वहाँ बाहर विभिन्न Base64 मानकों का उल्लेख नहीं है।
रॉल्फ R

इस उपयोग के मामले के लिए स्पष्ट और स्पष्ट। अगर मुझे एक और एल्गोरिथ्म की आवश्यकता है तो मैं इसे विस्तार विधि के रूप में कभी भी उपयोग नहीं करूंगा।
ब्रुंकल

1
फिर भी मैं कुछ पसंद करूंगा: 'toBase64 ()' और 'fromBase64 ()' एक न्यूनतम के रूप में। इस तरीके से मुझे यह जानने की कोई आवश्यकता नहीं है कि विधि क्या करेगी। ध्यान रखें: "कोड को जितना लिखा जाता है, उससे अधिक पढ़ा जाता है"।
रॉल्फ R

8

यदि आप कोटलिन का उपयोग इस तरह से कर रहे हैं

एनकोड के लिए

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

डिकोड के लिए

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

3
या आप charset ("UTF-8") के बजाय Charsets.UTF_8 का उपयोग कर सकते हैं।
मकोवस्तार

@makovkastar अभी पुष्टि करें, अब StandardCharsets.UTF_8
मैट

7

कुछ इस तरह

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
आपका उत्तर बताता है कि बेस 64 में पासवर्ड कूटबन्धन एक अच्छा अभ्यास है। वास्तव में यह नहीं है क्योंकि कोई भी इसे बस डिकोड कर सकता है।
हेनरिक

2

एन्क्रिप्ट करने के लिए:

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

डिक्रिप्ट करने के लिए:

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

1

पिछले उत्तरों के आधार पर मैं निम्नलिखित उपयोगिता विधियों का उपयोग कर रहा हूँ यदि कोई भी इसका उपयोग करना चाहे।

    /**
 * @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' वर्ग बेस 64 प्रारूप में जानकारी को एन्कोड और डिकोड करने के लिए कार्यक्षमता प्रदान करता है।

Base64 एनकोडर कैसे प्राप्त करें?

Encoder encoder = Base64.getEncoder();

बेस64 डिकोडर कैसे प्राप्त करें?

Decoder decoder = Base64.getDecoder();

डेटा को एनकोड कैसे करें?

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

डेटा को डीकोड कैसे करें?

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

आप इस लिंक पर अधिक जानकारी प्राप्त कर सकते हैं ।


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

यह एन्ड्रॉयड स्टूडियो में बेस 64 के माध्यम से एन्कोड और डायोड करने के लिए है
आसिफ अली

कृपया अपनी टिप्पणी उत्तर में अपडेट करें। एकल उत्तर में जावा और एक्सएमएल भी पोस्ट करें।
Android

कुछ कोड के साथ कुछ स्पष्टीकरण लिखना हमेशा एक अच्छा अभ्यास होता है। धन्यवाद!
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

एनकोडर के लिए Android एपीआई के byte[]लिएBase64String

byte[] data=new byte[];
String Base64encodeString=android.util.Base64.encodeToString(data, android.util.Base64.DEFAULT);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.