Whiz Tools

ബേസ്64 എൻകോഡർ/ഡികോഡർ

വാചകം ബേസ്64 എൻകോഡിംഗിലേക്ക് മാറ്റുക

കോപിയ്ക്കുക

Base64 एन्कोडर और डिकोडर

परिचय

Base64 एक बाइनरी-से-टेक्स्ट एन्कोडिंग योजना है जो बाइनरी डेटा का प्रतिनिधित्व ASCII स्ट्रिंग प्रारूप में करती है। इसे बाइनरी प्रारूपों में संग्रहीत डेटा को उन चैनलों के पार ले जाने के लिए डिज़ाइन किया गया है जो केवल विश्वसनीय रूप से टेक्स्ट सामग्री का समर्थन करते हैं। Base64 एन्कोडिंग बाइनरी डेटा को 64 वर्णों के सेट में परिवर्तित करती है (इसलिए नाम) जिसे टेक्स्ट-आधारित प्रोटोकॉल के माध्यम से सुरक्षित रूप से प्रसारित किया जा सकता है बिना डेटा भ्रष्टाचार के।

Base64 वर्ण सेट में शामिल हैं:

  • बड़े अक्षर A-Z (26 वर्ण)
  • छोटे अक्षर a-z (26 वर्ण)
  • अंक 0-9 (10 वर्ण)
  • दो अतिरिक्त वर्ण, सामान्यतः "+" और "/" (2 वर्ण)

यह उपकरण आपको आसानी से टेक्स्ट को Base64 प्रारूप में एन्कोड करने या Base64 स्ट्रिंग को उनके मूल टेक्स्ट में वापस डिकोड करने की अनुमति देता है। यह विशेष रूप से डेवलपर्स, आईटी पेशेवरों और किसी भी व्यक्ति के लिए उपयोगी है जो डेटा के साथ काम कर रहा है जिसे टेक्स्ट-आधारित चैनलों के पार सुरक्षित रूप से प्रसारित करने की आवश्यकता है।

Base64 एन्कोडिंग कैसे काम करती है

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

Base64 एन्कोडिंग प्रत्येक तीन बाइट्स (24 बिट्स) के बाइनरी डेटा के समूह को चार Base64 वर्णों में परिवर्तित करके काम करती है। यह प्रक्रिया निम्नलिखित चरणों का पालन करती है:

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

जब इनपुट की लंबाई 3 से विभाज्य नहीं होती है, तो 4:3 के आउटपुट से इनपुट लंबाई के अनुपात को बनाए रखने के लिए "=" वर्णों के साथ पैडिंग जोड़ी जाती है।

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

बाइट्स के अनुक्रम b1,b2,b3b_1, b_2, b_3 के लिए, संबंधित Base64 वर्ण 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] Base64 वर्णमाला में ii-वां वर्ण का प्रतिनिधित्व करता है।

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

Base64 डिकोडिंग एन्कोडिंग प्रक्रिया को उलटती है:

  1. प्रत्येक Base64 वर्ण को इसके 6-बिट मान में परिवर्तित करें
  2. इन 6-बिट मानों को एकत्रित करें
  3. बिट्स को 8-बिट समूहों (बाइट्स) में समूहित करें
  4. प्रत्येक बाइट को इसके संबंधित वर्ण में परिवर्तित करें

पैडिंग

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

  • यदि एक बाइट शेष है, तो इसे दो Base64 वर्णों में परिवर्तित किया जाता है और "==" के साथ समाप्त किया जाता है
  • यदि दो बाइट्स शेष हैं, तो उन्हें तीन Base64 वर्णों में परिवर्तित किया जाता है और "=" के साथ समाप्त किया जाता है

उदाहरण

आइए "Hello" टेक्स्ट को Base64 में एन्कोड करें:

  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. Base64 वर्णमाला में देखने पर: S, G, V, s, b, G, 8
  7. परिणाम है "SGVsbG8="

ध्यान दें कि अंत में "=" पैडिंग है क्योंकि इनपुट की लंबाई (5 बाइट्स) 3 से विभाज्य नहीं है।

सूत्र

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

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

जहां x\lceil x \rceil छत फ़ंक्शन (नजदीकी पूर्णांक में ऊपर की ओर गोल करना) का प्रतिनिधित्व करता है।

उपयोग के मामले

Base64 एन्कोडिंग का विभिन्न अनुप्रयोगों में व्यापक रूप से उपयोग किया जाता है:

  1. ईमेल अटैचमेंट: MIME (मल्टीपर्पज़ इंटरनेट मेल एक्सटेंशन्स) बाइनरी अटैचमेंट को ईमेल में एन्कोड करने के लिए Base64 का उपयोग करता है।

  2. डेटा यूआरएल: HTML, CSS, या JavaScript में छोटे चित्रों, फोंटों, या अन्य संसाधनों को सीधे एम्बेड करना data: यूआरएल योजना का उपयोग करके।

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

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

  5. प्रमाणीकरण प्रणालियाँ: HTTP में बेसिक प्रमाणीकरण Base64 एन्कोडिंग का उपयोग करता है (हालांकि यह सुरक्षा के लिए नहीं है, केवल एन्कोडिंग के लिए)।

  6. क्रिप्टोग्राफी: विभिन्न क्रिप्टोग्राफिक प्रोटोकॉल और प्रणालियों का हिस्सा, अक्सर कुंजी या प्रमाणपत्रों को एन्कोड करने के लिए।

  7. कुकी मान: कुकीज़ में संग्रहीत करने के लिए जटिल डेटा संरचनाओं को एन्कोड करना।

विकल्प

हालांकि Base64 का व्यापक उपयोग होता है, कुछ स्थितियों में अधिक उपयुक्त विकल्प हो सकते हैं:

  1. URL-सुरक्षित Base64: एक भिन्नता जो "+" और "/" के बजाय "-" और "_" का उपयोग करती है ताकि URL एन्कोडिंग समस्याओं से बचा जा सके। यह डेटा के लिए उपयोगी है जिसे यूआरएल में शामिल किया जाएगा।

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

  3. हेक्स एन्कोडिंग: हेक्साडेसिमल में सरल रूपांतरण, जो कम कुशल है (आकार को दोगुना करता है) लेकिन बहुत सरल और व्यापक रूप से समर्थित है।

  4. बाइनरी ट्रांसफर: बड़े फ़ाइलों के लिए या जब दक्षता महत्वपूर्ण हो, सीधे बाइनरी ट्रांसफर प्रोटोकॉल जैसे HTTP का उपयोग करना उचित है जिसमें उचित सामग्री प्रकार हेडर होते हैं।

  5. संपीड़न + Base64: बड़े टेक्स्ट डेटा के लिए, एन्कोडिंग से पहले संपीड़न आकार वृद्धि को कम कर सकता है।

  6. JSON/XML अनुक्रमण: संरचित डेटा के लिए, Base64 एन्कोडिंग के बजाय मूल JSON या XML अनुक्रमण का उपयोग करना अधिक उपयुक्त हो सकता है।

इतिहास

Base64 एन्कोडिंग की जड़ें प्रारंभिक कंप्यूटिंग और दूरसंचार प्रणालियों में हैं जहां बाइनरी डेटा को टेक्स्ट के लिए डिज़ाइन किए गए चैनलों के माध्यम से प्रसारित करने की आवश्यकता थी।

Base64 का औपचारिक विनिर्देशन पहली बार 1987 में RFC 989 के रूप में प्रकाशित किया गया था, जिसने प्राइवेसी एनहांस्ड मेल (PEM) को परिभाषित किया। इसे बाद में RFC 1421 (1993) और RFC 2045 (1996, MIME के भाग के रूप में) में अपडेट किया गया।

"Base64" शब्द इस तथ्य से आता है कि एन्कोडिंग बाइनरी डेटा का प्रतिनिधित्व करने के लिए 64 विभिन्न ASCII वर्णों का उपयोग करती है। इन 64 वर्णों के चयन का उद्देश्य था, क्योंकि 64 एक शक्ति है 2 (2^6), जो बाइनरी और Base64 के बीच रूपांतरण को कुशल बनाता है।

समय के साथ, Base64 के कई भिन्नताएँ उभरी हैं:

  • मानक Base64: RFC 4648 में परिभाषित, A-Z, a-z, 0-9, +, / और = पैडिंग का उपयोग करता है
  • URL-सुरक्षित Base64: "+" और "/" के बजाय "-" और "_" का उपयोग करता है ताकि URL एन्कोडिंग समस्याओं से बचा जा सके
  • फाइलनाम-सुरक्षित Base64: URL-सुरक्षित के समान, फाइल नामों में उपयोग के लिए डिज़ाइन किया गया
  • IMAP के लिए संशोधित Base64: IMAP प्रोटोकॉल में विशेष वर्णों के एक अलग सेट के साथ उपयोग किया जाता है

तीन दशकों से अधिक समय के बावजूद, Base64 आधुनिक कंप्यूटिंग में एक मौलिक उपकरण बना हुआ है, विशेष रूप से वेब अनुप्रयोगों और APIs के उदय के साथ जो JSON जैसे टेक्स्ट-आधारित डेटा प्रारूपों पर बहुत निर्भर करते हैं।

कोड उदाहरण

यहां विभिन्न प्रोग्रामिंग भाषाओं में Base64 एन्कोडिंग और डिकोडिंग के उदाहरण दिए गए हैं:

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

function decodeFromBase64(base64String) {
  try {
    return atob(base64String);
  } catch (e) {
    throw new Error("अमान्य Base64 स्ट्रिंग");
  }
}

// उदाहरण उपयोग
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 Base64 एन्कोडिंग/डिकोडिंग
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:
        # Base64 स्ट्रिंग को बाइट्स में परिवर्तित करें और फिर डिकोड करें
        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"अमान्य Base64 स्ट्रिंग: {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 Base64 एन्कोडिंग/डिकोडिंग
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("अमान्य Base64 स्ट्रिंग: " + 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 Base64 एन्कोडिंग/डिकोडिंग
function encodeToBase64($text) {
    return base64_encode($text);
}

function decodeFromBase64($base64String) {
    $decoded = base64_decode($base64String, true);
    if ($decoded === false) {
        throw new Exception("अमान्य Base64 स्ट्रिंग");
    }
    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# Base64 एन्कोडिंग/डिकोडिंग
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("अमान्य Base64 स्ट्रिंग");
        }
    }
    
    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 Base64 एन्कोडिंग/डिकोडिंग
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 "अमान्य Base64 स्ट्रिंग: #{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 Base64 एन्कोडिंग/डिकोडिंग
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("अमान्य Base64 स्ट्रिंग: %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 Base64 एन्कोडिंग/डिकोडिंग
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("त्रुटि: Base64 स्ट्रिंग को डिकोड नहीं कर सके")
    }
} else {
    print("त्रुटि: टेक्स्ट को एन्कोड नहीं कर सके")
}
' Excel VBA Base64 एन्कोडिंग/डिकोडिंग
' नोट: इसके लिए 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 = "त्रुटि: अमान्य Base64 स्ट्रिंग"
End Function

' कार्यपत्रक में उपयोग:
' =EncodeToBase64("Hello, World!")
' =DecodeFromBase64("SGVsbG8sIFdvcmxkIQ==")
# R Base64 एन्कोडिंग/डिकोडिंग
# '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({
    # Base64 स्ट्रिंग को कच्चे बाइट्स में परिवर्तित करें, फिर डिकोड करें
    base64_raw <- charToRaw(base64_string)
    decoded_raw <- base64decode(base64_raw)
    return(rawToChar(decoded_raw))
  }, error = function(e) {
    stop(paste("अमान्य Base64 स्ट्रिंग:", 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 Base64 एन्कोडिंग/डिकोडिंग
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
        % Base64 स्ट्रिंग को uint8 एरे में डिकोड करें
        bytes = base64decode(base64String);
        decoded = char(bytes);
    catch
        error('अमान्य Base64 स्ट्रिंग');
    end
end
// C Base64 एन्कोडिंग/डिकोडिंग 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; // अमान्य Base64 इनपुट
    }
    
    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("त्रुटि: अमान्य Base64 स्ट्रिंग\n");
    }
    
    free(encoded);
    
    return 0;
}
// Rust Base64 एन्कोडिंग/डिकोडिंग
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!("अमान्य Base64 स्ट्रिंग: {}", 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)
    }
}

किनारे के मामले और विचार

Base64 एन्कोडिंग और डिकोडिंग के साथ काम करते समय, इन महत्वपूर्ण विचारों से अवगत रहें:

  1. यूनीकोड और गैर-ASCII वर्ण: जब गैर-ASCII वर्णों के साथ टेक्स्ट एन्कोड करते हैं, तो Base64 एन्कोडिंग से पहले उचित वर्ण एन्कोडिंग (आमतौर पर UTF-8) सुनिश्चित करें।

  2. पैडिंग: मानक Base64 आउटपुट लंबाई को 4 के गुणांक में सुनिश्चित करने के लिए "=" वर्णों के साथ पैडिंग का उपयोग करता है। कुछ कार्यान्वयन पैडिंग को छोड़ने की अनुमति देते हैं, जो संगतता समस्याओं का कारण बन सकता है।

  3. लाइन ब्रेक: पारंपरिक Base64 कार्यान्वयन पठनीयता के लिए लाइन ब्रेक डालते हैं (आमतौर पर हर 76 वर्ण), लेकिन आधुनिक अनुप्रयोग अक्सर इन्हें छोड़ देते हैं।

  4. यूआरएल-सुरक्षित Base64: मानक Base64 "+" और "/" वर्णों का उपयोग करता है जिनका यूआरएल में विशेष अर्थ होता है। यूआरएल संदर्भों के लिए, यूआरएल-सुरक्षित Base64 का उपयोग करें जो इनका स्थान "-" और "_" से लेता है।

  5. स्पेस: डिकोड करते समय, कुछ कार्यान्वयन उदार होते हैं और स्पेस को अनदेखा करते हैं, जबकि अन्य सटीक इनपुट की आवश्यकता होती है।

  6. आकार वृद्धि: Base64 एन्कोडिंग डेटा के आकार को लगभग 33% बढ़ा देती है (3 इनपुट बाइट्स के लिए 4 आउटपुट बाइट्स)।

  7. प्रदर्शन: Base64 एन्कोडिंग/डिकोडिंग बहुत बड़े डेटा के लिए गणनात्मक रूप से गहन हो सकती है। बड़े फ़ाइलों के लिए स्ट्रीमिंग दृष्टिकोण पर विचार करें।

संदर्भ

  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