Whiz Tools

बेस64 एन्कोडर/डिकोडर

टेक्स्टला बेस64 एन्कोडिंगमध्ये आणि त्यातून रूपांतरित करा

कॉपी करा

बेस64 एन्कोडर आणि डिकोडर

परिचय

बेस64 एक बायनरी-टू-टेक्स्ट एन्कोडिंग योजना आहे जी बायनरी डेटा ASCII स्ट्रिंग फॉरमॅटमध्ये दर्शवते. हे बायनरी स्वरूपात संग्रहित डेटा टेक्स्ट सामग्रीवर विश्वासाने पाठवण्यासाठी डिझाइन केले आहे. बेस64 एन्कोडिंग बायनरी डेटाला 64 वर्णांच्या सेटमध्ये रूपांतरित करते (त्यामुळे नाव) जे टेक्स्ट-आधारित प्रोटोकॉलद्वारे सुरक्षितपणे प्रसारित केले जाऊ शकते.

बेस64 वर्ण सेटमध्ये समाविष्ट आहे:

  • मोठ्या अक्षरे A-Z (26 वर्ण)
  • लहान अक्षरे a-z (26 वर्ण)
  • अंक 0-9 (10 वर्ण)
  • दोन अतिरिक्त वर्ण, सामान्यतः "+" आणि "/" (2 वर्ण)

हे साधन तुम्हाला टेक्स्टला बेस64 फॉरमॅटमध्ये सहजपणे एन्कोड किंवा बेस64 स्ट्रिंग्सना त्यांच्या मूळ टेक्स्टमध्ये डिकोड करण्याची परवानगी देते. हे विशेषतः विकासक, IT व्यावसायिक आणि कोणत्याही व्यक्तीसाठी उपयुक्त आहे जो डेटा सुरक्षितपणे टेक्स्ट-आधारित चॅनेलवर प्रसारित करणे आवश्यक आहे.

बेस64 एन्कोडिंग कसे कार्य करते

एन्कोडिंग प्रक्रिया

बेस64 एन्कोडिंग प्रत्येक तीन बाइट्सच्या गटाला (24 बिट्स) चार बेस64 वर्णांमध्ये रूपांतरित करून कार्य करते. प्रक्रिया खालील चरणांचे अनुसरण करते:

  1. इनपुट टेक्स्टचा बायनरी प्रतिनिधित्वात रूपांतरित करा (ASCII किंवा UTF-8 एन्कोडिंगचा वापर करून)
  2. बायनरी डेटाला 24 बिट्सच्या गटांमध्ये गटित करा (3 बाइट्स)
  3. प्रत्येक 24-बिट गटाला चार 6-बिट गटांमध्ये विभाजित करा
  4. प्रत्येक 6-बिट गटाला त्याच्या संबंधित बेस64 वर्णात रूपांतरित करा

जेव्हा इनपुट लांबी 3 च्या गुणाकारात नसते, तेव्हा 4:3 गुणोत्तर राखण्यासाठी "=" वर्णांसह पॅडिंग जोडले जाते.

गणितीय प्रतिनिधित्व

बाइट्सच्या अनुक्रम b1,b2,b3b_1, b_2, b_3 साठी, संबंधित बेस64 वर्ण c1,c2,c3,c4c_1, c_2, c_3, c_4 खालीलप्रमाणे गणना केली जाते:

c1=Base64[(b1>>2)]c_1 = \text{Base64}[(b_1 >> 2)]
c2=Base64[((b1&3)<<4)(b2>>4)]c_2 = \text{Base64}[((b_1 \& 3) << 4) | (b_2 >> 4)]
c3=Base64[((b2&15)<<2)(b3>>6)]c_3 = \text{Base64}[((b_2 \& 15) << 2) | (b_3 >> 6)]
c4=Base64[(b3&63)]c_4 = \text{Base64}[(b_3 \& 63)]

जिथे Base64[i]\text{Base64}[i] म्हणजे बेस64 वर्णमाला मधील ii-वा वर्ण.

डिकोडिंग प्रक्रिया

बेस64 डिकोडिंग एन्कोडिंग प्रक्रियेचा उलटा करते:

  1. प्रत्येक बेस64 वर्णाला त्याच्या 6-बिट मूल्यात रूपांतरित करा
  2. या 6-बिट मूल्यांचे एकत्रीकरण करा
  3. बिट्सना 8-बिट गटांमध्ये (बाइट्स) गटित करा
  4. प्रत्येक बाइटला त्याच्या संबंधित वर्णात रूपांतरित करा

पॅडिंग

जेव्हा एन्कोड करण्यासाठी बाइट्सची संख्या 3 च्या गुणाकारात नसते, तेव्हा पॅडिंग लागू केले जाते:

  • जर एक बाइट उरला असेल, तर त्याला दोन बेस64 वर्णांमध्ये रूपांतरित केले जाते आणि "==" सह समाप्त होते
  • जर दोन बाइट्स उरले असतील, तर त्यांना तीन बेस64 वर्णांमध्ये रूपांतरित केले जाते आणि "=" सह समाप्त होते

उदाहरण

"Hello" टेक्स्टला बेस64 मध्ये एन्कोड करूया:

  1. "Hello" चा ASCII प्रतिनिधित्व: 72 101 108 108 111
  2. बायनरी प्रतिनिधित्व: 01001000 01100101 01101100 01101100 01101111
  3. 6-बिट गटांमध्ये गटित करणे: 010010 000110 010101 101100 011011 000110 1111
  4. अंतिम गटात फक्त 4 बिट्स आहेत, म्हणून शून्यांसह पॅडिंग केले जाते: 010010 000110 010101 101100 011011 000110 111100
  5. दशमानमध्ये रूपांतरित करणे: 18, 6, 21, 44, 27, 6, 60
  6. बेस64 वर्णमालेत शोधणे: S, G, V, s, b, G, 8
  7. परिणाम "SGVsbG8=" आहे

अखेर "=" पॅडिंग आहे कारण इनपुट लांबी (5 बाइट्स) 3 च्या गुणाकारात नाही.

सूत्र

बेस64 एन्कोडेड स्ट्रिंगची लांबी गणना करण्याचे सामान्य सूत्र आहे:

encoded_length=4×input_length3\text{encoded\_length} = 4 \times \lceil \frac{\text{input\_length}}{3} \rceil

जिथे x\lceil x \rceil म्हणजे छत कार्य (जवळच्या पूर्णांकात वरच्या दिशेने गोल करणे).

उपयोग केसेस

बेस64 एन्कोडिंग विविध अनुप्रयोगांमध्ये मोठ्या प्रमाणावर वापरले जाते:

  1. ईमेल अटॅचमेंट्स: MIME (मल्टीपर्पज इंटरनेट मेल एक्सटेंशन्स) ईमेलमध्ये बायनरी अटॅचमेंट्स एन्कोड करण्यासाठी बेस64 वापरते.

  2. डेटा URL: HTML, CSS, किंवा JavaScript मध्ये लहान प्रतिमा, फॉन्ट, किंवा इतर संसाधने थेट समाविष्ट करणे data: URL स्कीम वापरून.

  3. API संवाद: JSON पेलोड्स किंवा इतर टेक्स्ट-आधारित API स्वरूपांमध्ये बायनरी डेटा सुरक्षितपणे प्रसारित करणे.

  4. टेक्स्ट स्वरूपांमध्ये बायनरी डेटा संग्रहित करणे: जेव्हा बायनरी डेटा XML, JSON, किंवा इतर टेक्स्ट-आधारित स्वरूपांमध्ये संग्रहित करणे आवश्यक असते.

  5. प्रमाणपत्र प्रणाली: HTTP मध्ये बेसिक प्रमाणीकरण बेस64 एन्कोडिंगचा वापर करते (तरीही हे सुरक्षा साठी नाही, फक्त एन्कोडिंगसाठी आहे).

  6. क्रिप्टोग्राफी: विविध क्रिप्टोग्राफिक प्रोटोकॉल आणि प्रणालींचा एक भाग, सहसा की किंवा प्रमाणपत्रे एन्कोड करण्यासाठी.

  7. कुकी मूल्ये: कुकीजमध्ये संग्रहित करण्यासाठी जटिल डेटा संरचना एन्कोड करणे.

पर्याय

जरी बेस64 मोठ्या प्रमाणावर वापरले जाते, तरी काही परिस्थितींमध्ये अधिक योग्य पर्याय असू शकतात:

  1. URL-सुरक्षित बेस64: एक भिन्नता जी "+" आणि "/" च्या ऐवजी "-" आणि "_" वापरते जेणेकरून URL एन्कोडिंग समस्यांपासून वाचता येईल. URL मध्ये समाविष्ट केलेल्या डेटासाठी उपयुक्त.

  2. बेस32: 32 वर्ण सेट वापरतो, ज्यामुळे लांब आउटपुट होते पण मानव वाचनक्षमतेसाठी आणि केस संवेदनशीलतेसाठी चांगले आहे.

  3. हेक्स एन्कोडिंग: हेक्साडेसिमलमध्ये साधे रूपांतर, जे कमी कार्यक्षम आहे (आकार दुप्पट करतो) पण खूप साधे आणि मोठ्या प्रमाणावर समर्थित आहे.

  4. बायनरी ट्रान्सफर: मोठ्या फाइल्ससाठी किंवा जेव्हा कार्यक्षमता महत्त्वाची असते, तेव्हा थेट बायनरी ट्रान्सफर प्रोटोकॉल जसे की HTTP योग्य सामग्री प्रकार हेडरांसह अधिक योग्य आहे.

  5. संकुचन + बेस64: मोठ्या टेक्स्ट डेटासाठी, एन्कोडिंग करण्यापूर्वी संकुचन केल्याने आकार वाढ कमी होऊ शकतो.

  6. JSON/XML सिरीयलायझेशन: संरचित डेटासाठी, बेस64 एन्कोडिंगच्या तुलनेत मूळ JSON किंवा XML सिरीयलायझेशन अधिक योग्य असू शकते.

इतिहास

बेस64 एन्कोडिंगच्या मूळांचा संबंध प्रारंभिक संगणक आणि दूरसंचार प्रणालींशी आहे जिथे बायनरी डेटा टेक्स्टसाठी डिझाइन केलेल्या चॅनेलवर प्रसारित करणे आवश्यक होते.

बेस64 चा औपचारिक तपशील 1987 मध्ये RFC 989 च्या भाग म्हणून प्रकाशित झाला, ज्याने प्रायव्हसी एन्हान्स्ड मेल (PEM) व्याख्या केली. हे नंतर RFC 1421 (1993) आणि RFC 2045 (1996, MIME च्या भाग म्हणून) मध्ये अद्यतनित केले गेले.

"बेस64" हा शब्द यामध्ये येतो की एन्कोडिंग 64 भिन्न ASCII वर्णांचा वापर करते बायनरी डेटा दर्शवण्यासाठी. या 64 वर्णांचा निवड योजनेतून होता, कारण 64 हा 2 चा एक सामर्थ्य आहे (2^6), जे बायनरी आणि बेस64 दरम्यान रूपांतरण कार्यक्षम बनवते.

काळानुसार, बेस64 च्या अनेक भिन्नता उदयास आल्या:

  • मानक बेस64: RFC 4648 मध्ये व्याख्यायित केलेले, A-Z, a-z, 0-9, +, / आणि = पॅडिंगसाठी वापरले
  • URL-सुरक्षित बेस64: "+" आणि "/" च्या ऐवजी - आणि _ वापरते जेणेकरून URL एन्कोडिंग समस्यांपासून वाचता येईल
  • फाईलनाव-सुरक्षित बेस64: URL-सुरक्षित प्रमाणित, फाईल नावांमध्ये वापरण्यासाठी डिझाइन केलेले
  • IMAP साठी सुधारित बेस64: IMAP प्रोटोकॉलमध्ये विशेष वर्णांच्या भिन्न सेटसह वापरले जाते

तीन दशकांहून अधिक काळानंतर, बेस64 आधुनिक संगणकात एक मूलभूत साधन आहे, विशेषतः वेब अनुप्रयोग आणि API च्या उदयाबरोबर जे JSON सारख्या टेक्स्ट-आधारित डेटा स्वरूपांवर अवलंबून आहेत.

कोड उदाहरणे

येथे विविध प्रोग्रामिंग भाषांमध्ये बेस64 एन्कोडिंग आणि डिकोडिंगचे उदाहरणे आहेत:

// JavaScript बेस64 एन्कोडिंग/डिकोडिंग
function encodeToBase64(text) {
  return btoa(text);
}

function decodeFromBase64(base64String) {
  try {
    return atob(base64String);
  } catch (e) {
    throw new Error("अवैध बेस64 स्ट्रिंग");
  }
}

// उदाहरण वापर
const originalText = "Hello, World!";
const encoded = encodeToBase64(originalText);
console.log("एन्कोडेड:", encoded);  // SGVsbG8sIFdvcmxkIQ==

try {
  const decoded = decodeFromBase64(encoded);
  console.log("डिकोडेड:", decoded);  // Hello, World!
} catch (error) {
  console.error(error.message);
}
# Python बेस64 एन्कोडिंग/डिकोडिंग
import base64

def encode_to_base64(text):
    # स्ट्रिंगला बाइट्समध्ये रूपांतरित करा आणि नंतर एन्कोड करा
    text_bytes = text.encode('utf-8')
    base64_bytes = base64.b64encode(text_bytes)
    return base64_bytes.decode('utf-8')

def decode_from_base64(base64_string):
    try:
        # बेस64 स्ट्रिंगला बाइट्समध्ये रूपांतरित करा आणि नंतर डिकोड करा
        base64_bytes = base64_string.encode('utf-8')
        text_bytes = base64.b64decode(base64_bytes)
        return text_bytes.decode('utf-8')
    except Exception as e:
        raise ValueError(f"अवैध बेस64 स्ट्रिंग: {e}")

# उदाहरण वापर
original_text = "Hello, World!"
encoded = encode_to_base64(original_text)
print(f"एन्कोडेड: {encoded}")  # SGVsbG8sIFdvcmxkIQ==

try:
    decoded = decode_from_base64(encoded)
    print(f"डिकोडेड: {decoded}")  # Hello, World!
except ValueError as e:
    print(e)
// Java बेस64 एन्कोडिंग/डिकोडिंग
import java.util.Base64;
import java.nio.charset.StandardCharsets;

public class Base64Example {
    public static String encodeToBase64(String text) {
        byte[] textBytes = text.getBytes(StandardCharsets.UTF_8);
        byte[] encodedBytes = Base64.getEncoder().encode(textBytes);
        return new String(encodedBytes, StandardCharsets.UTF_8);
    }
    
    public static String decodeFromBase64(String base64String) {
        try {
            byte[] base64Bytes = base64String.getBytes(StandardCharsets.UTF_8);
            byte[] decodedBytes = Base64.getDecoder().decode(base64Bytes);
            return new String(decodedBytes, StandardCharsets.UTF_8);
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("अवैध बेस64 स्ट्रिंग: " + e.getMessage());
        }
    }
    
    public static void main(String[] args) {
        String originalText = "Hello, World!";
        String encoded = encodeToBase64(originalText);
        System.out.println("एन्कोडेड: " + encoded);  // SGVsbG8sIFdvcmxkIQ==
        
        try {
            String decoded = decodeFromBase64(encoded);
            System.out.println("डिकोडेड: " + decoded);  // Hello, World!
        } catch (IllegalArgumentException e) {
            System.err.println(e.getMessage());
        }
    }
}
<?php
// PHP बेस64 एन्कोडिंग/डिकोडिंग
function encodeToBase64($text) {
    return base64_encode($text);
}

function decodeFromBase64($base64String) {
    $decoded = base64_decode($base64String, true);
    if ($decoded === false) {
        throw new Exception("अवैध बेस64 स्ट्रिंग");
    }
    return $decoded;
}

// उदाहरण वापर
$originalText = "Hello, World!";
$encoded = encodeToBase64($originalText);
echo "एन्कोडेड: " . $encoded . "\n";  // SGVsbG8sIFdvcmxkIQ==

try {
    $decoded = decodeFromBase64($encoded);
    echo "डिकोडेड: " . $decoded . "\n";  // Hello, World!
} catch (Exception $e) {
    echo "त्रुटी: " . $e->getMessage() . "\n";
}
?>
// C# बेस64 एन्कोडिंग/डिकोडिंग
using System;
using System.Text;

class Base64Example
{
    public static string EncodeToBase64(string text)
    {
        byte[] textBytes = Encoding.UTF8.GetBytes(text);
        return Convert.ToBase64String(textBytes);
    }
    
    public static string DecodeFromBase64(string base64String)
    {
        try
        {
            byte[] base64Bytes = Convert.FromBase64String(base64String);
            return Encoding.UTF8.GetString(base64Bytes);
        }
        catch (FormatException)
        {
            throw new FormatException("अवैध बेस64 स्ट्रिंग");
        }
    }
    
    static void Main()
    {
        string originalText = "Hello, World!";
        string encoded = EncodeToBase64(originalText);
        Console.WriteLine($"एन्कोडेड: {encoded}");  // SGVsbG8sIFdvcmxkIQ==
        
        try
        {
            string decoded = DecodeFromBase64(encoded);
            Console.WriteLine($"डिकोडेड: {decoded}");  // Hello, World!
        }
        catch (FormatException e)
        {
            Console.WriteLine($"त्रुटी: {e.Message}");
        }
    }
}
# Ruby बेस64 एन्कोडिंग/डिकोडिंग
require 'base64'

def encode_to_base64(text)
  Base64.strict_encode64(text)
end

def decode_from_base64(base64_string)
  begin
    Base64.strict_decode64(base64_string)
  rescue ArgumentError => e
    raise "अवैध बेस64 स्ट्रिंग: #{e.message}"
  end
end

# उदाहरण वापर
original_text = "Hello, World!"
encoded = encode_to_base64(original_text)
puts "एन्कोडेड: #{encoded}"  # SGVsbG8sIFdvcmxkIQ==

begin
  decoded = decode_from_base64(encoded)
  puts "डिकोडेड: #{decoded}"  # Hello, World!
rescue StandardError => e
  puts "त्रुटी: #{e.message}"
end
// Go बेस64 एन्कोडिंग/डिकोडिंग
package main

import (
    "encoding/base64"
    "fmt"
)

func encodeToBase64(text string) string {
    return base64.StdEncoding.EncodeToString([]byte(text))
}

func decodeFromBase64(base64String string) (string, error) {
    bytes, err := base64.StdEncoding.DecodeString(base64String)
    if err != nil {
        return "", fmt.Errorf("अवैध बेस64 स्ट्रिंग: %v", err)
    }
    return string(bytes), nil
}

func main() {
    originalText := "Hello, World!"
    encoded := encodeToBase64(originalText)
    fmt.Println("एन्कोडेड:", encoded)  // SGVsbG8sIFdvcmxkIQ==
    
    decoded, err := decodeFromBase64(encoded)
    if err != nil {
        fmt.Println("त्रुटी:", err)
    } else {
        fmt.Println("डिकोडेड:", decoded)  // Hello, World!
    }
}
// Swift बेस64 एन्कोडिंग/डिकोडिंग
import Foundation

func encodeToBase64(_ text: String) -> String? {
    if let data = text.data(using: .utf8) {
        return data.base64EncodedString()
    }
    return nil
}

func decodeFromBase64(_ base64String: String) -> String? {
    if let data = Data(base64Encoded: base64String) {
        return String(data: data, encoding: .utf8)
    }
    return nil
}

// उदाहरण वापर
let originalText = "Hello, World!"
if let encoded = encodeToBase64(originalText) {
    print("एन्कोडेड: \(encoded)")  // SGVsbG8sIFdvcmxkIQ==
    
    if let decoded = decodeFromBase64(encoded) {
        print("डिकोडेड: \(decoded)")  // Hello, World!
    } else {
        print("त्रुटी: बेस64 स्ट्रिंग डिकोड करू शकत नाही")
    }
} else {
    print("त्रुटी: टेक्स्ट एन्कोड करू शकत नाही")
}
' Excel VBA बेस64 एन्कोडिंग/डिकोडिंग
' नोट: यासाठी Microsoft XML, v6.0 संदर्भ आवश्यक आहे
Function EncodeToBase64(text As String) As String
    Dim xmlObj As Object
    Set xmlObj = CreateObject("MSXML2.DOMDocument")
    
    Dim xmlNode As Object
    Set xmlNode = xmlObj.createElement("b64")
    
    xmlNode.DataType = "bin.base64"
    xmlNode.nodeTypedValue = StrConv(text, vbFromUnicode)
    
    EncodeToBase64 = xmlNode.text
    
    Set xmlNode = Nothing
    Set xmlObj = Nothing
End Function

Function DecodeFromBase64(base64String As String) As String
    On Error GoTo ErrorHandler
    
    Dim xmlObj As Object
    Set xmlObj = CreateObject("MSXML2.DOMDocument")
    
    Dim xmlNode As Object
    Set xmlNode = xmlObj.createElement("b64")
    
    xmlNode.DataType = "bin.base64"
    xmlNode.text = base64String
    
    DecodeFromBase64 = StrConv(xmlNode.nodeTypedValue, vbUnicode)
    
    Set xmlNode = Nothing
    Set xmlObj = Nothing
    Exit Function
    
ErrorHandler:
    DecodeFromBase64 = "त्रुटी: अवैध बेस64 स्ट्रिंग"
End Function

' वर्कशीटमध्ये वापर:
' =EncodeToBase64("Hello, World!")
' =DecodeFromBase64("SGVsbG8sIFdvcmxkIQ==")
# R बेस64 एन्कोडिंग/डिकोडिंग
# 'base64enc' पॅकेज आवश्यक आहे
# install.packages("base64enc")
library(base64enc)

encode_to_base64 <- function(text) {
  # टेक्स्टला कच्च्या बाइट्समध्ये रूपांतरित करा, नंतर एन्कोड करा
  text_raw <- charToRaw(text)
  base64_encoded <- base64encode(text_raw)
  return(rawToChar(base64_encoded))
}

decode_from_base64 <- function(base64_string) {
  tryCatch({
    # बेस64 स्ट्रिंगला कच्च्या बाइट्समध्ये रूपांतरित करा, नंतर डिकोड करा
    base64_raw <- charToRaw(base64_string)
    decoded_raw <- base64decode(base64_raw)
    return(rawToChar(decoded_raw))
  }, error = function(e) {
    stop(paste("अवैध बेस64 स्ट्रिंग:", e$message))
  })
}

# उदाहरण वापर
original_text <- "Hello, World!"
encoded <- encode_to_base64(original_text)
cat("एन्कोडेड:", encoded, "\n")  # SGVsbG8sIFdvcmxkIQ==

tryCatch({
  decoded <- decode_from_base64(encoded)
  cat("डिकोडेड:", decoded, "\n")  # Hello, World!
}, error = function(e) {
  cat("त्रुटी:", e$message, "\n")
})
% MATLAB बेस64 एन्कोडिंग/डिकोडिंग
function demo_base64()
    originalText = 'Hello, World!';
    
    % एन्कोड करा
    encoded = encode_to_base64(originalText);
    fprintf('एन्कोडेड: %s\n', encoded);  % SGVsbG8sIFdvcmxkIQ==
    
    % डिकोड करा
    try
        decoded = decode_from_base64(encoded);
        fprintf('डिकोडेड: %s\n', decoded);  % Hello, World!
    catch e
        fprintf('त्रुटी: %s\n', e.message);
    end
end

function encoded = encode_to_base64(text)
    % टेक्स्टला uint8 अ‍ॅरेमध्ये रूपांतरित करा आणि एन्कोड करा
    bytes = uint8(text);
    encoded = base64encode(bytes);
end

function decoded = decode_from_base64(base64String)
    try
        % बेस64 स्ट्रिंगला uint8 अ‍ॅरेमध्ये डिकोड करा
        bytes = base64decode(base64String);
        decoded = char(bytes);
    catch
        error('अवैध बेस64 स्ट्रिंग');
    end
end
// C बेस64 एन्कोडिंग/डिकोडिंग OpenSSL वापरून
#include <stdio.h>
#include <string.h>
#include <openssl/bio.h>
#include <openssl/evp.h>
#include <openssl/buffer.h>
#include <stdint.h>

char* encode_to_base64(const char* input) {
    BIO *bio, *b64;
    BUF_MEM *bufferPtr;
    
    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new(BIO_s_mem());
    bio = BIO_push(b64, bio);
    
    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
    BIO_write(bio, input, strlen(input));
    BIO_flush(bio);
    BIO_get_mem_ptr(bio, &bufferPtr);
    
    char* result = (char*)malloc(bufferPtr->length + 1);
    memcpy(result, bufferPtr->data, bufferPtr->length);
    result[bufferPtr->length] = '\0';
    
    BIO_free_all(bio);
    
    return result;
}

char* decode_from_base64(const char* input) {
    BIO *bio, *b64;
    size_t length = strlen(input);
    char* buffer = (char*)malloc(length);
    
    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new_mem_buf(input, -1);
    bio = BIO_push(b64, bio);
    
    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
    int decoded_length = BIO_read(bio, buffer, length);
    
    if (decoded_length <= 0) {
        free(buffer);
        BIO_free_all(bio);
        return NULL; // अवैध बेस64 इनपुट
    }
    
    buffer[decoded_length] = '\0';
    
    BIO_free_all(bio);
    
    return buffer;
}

int main() {
    const char* original_text = "Hello, World!";
    
    char* encoded = encode_to_base64(original_text);
    printf("एन्कोडेड: %s\n", encoded);  // SGVsbG8sIFdvcmxkIQ==
    
    char* decoded = decode_from_base64(encoded);
    if (decoded) {
        printf("डिकोडेड: %s\n", decoded);  // Hello, World!
        free(decoded);
    } else {
        printf("त्रुटी: अवैध बेस64 स्ट्रिंग\n");
    }
    
    free(encoded);
    
    return 0;
}
// Rust बेस64 एन्कोडिंग/डिकोडिंग
use base64::{encode, decode};
use std::str;

fn encode_to_base64(text: &str) -> String {
    encode(text)
}

fn decode_from_base64(base64_string: &str) -> Result<String, String> {
    match decode(base64_string) {
        Ok(bytes) => {
            match str::from_utf8(&bytes) {
                Ok(text) => Ok(text.to_string()),
                Err(e) => Err(format!("अवैध UTF-8 अनुक्रम: {}", e))
            }
        },
        Err(e) => Err(format!("अवैध बेस64 स्ट्रिंग: {}", e))
    }
}

fn main() {
    let original_text = "Hello, World!";
    let encoded = encode_to_base64(original_text);
    println!("एन्कोडेड: {}", encoded);  // SGVsbG8sIFdvcmxkIQ==
    
    match decode_from_base64(&encoded) {
        Ok(decoded) => println!("डिकोडेड: {}", decoded),  // Hello, World!
        Err(e) => println!("त्रुटी: {}", e)
    }
}

कडव्या बाबी आणि विचार

बेस64 एन्कोडिंग आणि डिकोडिंगसह कार्य करताना, या महत्त्वाच्या विचारांची जाणीव ठेवा:

  1. युनिकोड आणि नॉन-ASCII वर्ण: नॉन-ASCII वर्णांसह टेक्स्ट एन्कोड करताना, बेस64 एन्कोडिंगपूर्वी योग्य वर्ण एन्कोडिंग (सामान्यतः UTF-8) याची खात्री करा.

  2. पॅडिंग: मानक बेस64 आउटपुट लांबी 4 चा गुणाकार सुनिश्चित करण्यासाठी "=" वर्णांसह पॅडिंग वापरते. काही अंमलबजावणी पॅडिंग वगळण्यास अनुमती देतात, ज्यामुळे सुसंगततेच्या समस्यांचा सामना करावा लागतो.

  3. रेषा तोडणे: पारंपरिक बेस64 अंमलबजावणी वाचनक्षमतेसाठी रेषा तोडते (सामान्यतः प्रत्येक 76 वर्णांवर), परंतु आधुनिक अनुप्रयोग सहसा यांना वगळतात.

  4. URL-सुरक्षित बेस64: मानक बेस64 "+" आणि "/" वर्णांचा वापर करतो ज्यांना URL मध्ये विशेष अर्थ आहे. URL संदर्भांमध्ये, URL-सुरक्षित बेस64 वापरा जो यांना "-" आणि "_" ने बदलतो.

  5. पांढरे स्थान: डिकोडिंग करताना, काही अंमलबजावणी उदार असतात आणि पांढऱ्या जागेला दुर्लक्ष करतात, तर इतरांना अचूक इनपुटची आवश्यकता असते.

  6. आकार वाढ: बेस64 एन्कोडिंग डेटा आकारात सुमारे 33% वाढ करते (3 इनपुट बाइट्ससाठी 4 आउटपुट बाइट्स).

  7. कार्यक्षमता: खूप मोठ्या डेटासाठी बेस64 एन्कोडिंग/डिकोडिंग संगणकीयदृष्ट्या तीव्र असू शकते. मोठ्या फाइल्ससाठी स्ट्रीमिंग दृष्टिकोन विचारात घ्या.

संदर्भ

  1. RFC 4648 - The Base16, Base32, and Base64 Data Encodings
  2. RFC 2045 - MIME Part One: Format of Internet Message Bodies
  3. MDN Web Docs: Base64 encoding and decoding
  4. Base64 - Wikipedia
  5. MIME - Wikipedia
Feedback