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] ii-তম অক্ষরকে নির্দেশ করে Base64 বর্ণমালায়।

ডিকোডিং প্রক্রিয়া

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. ডেটা URL: HTML, CSS, বা JavaScript-এ ছোট ছবি, ফন্ট বা অন্যান্য সম্পদগুলি সরাসরি এম্বেড করা data: URL স্কিমা ব্যবহার করে।

  3. API যোগাযোগ: JSON পে-লোড বা অন্যান্য টেক্সট-ভিত্তিক API ফরম্যাটে বাইনারি ডেটা নিরাপদে প্রেরণ করা।

  4. টেক্সট ফরম্যাটে বাইনারি ডেটা সংরক্ষণ: যখন বাইনারি ডেটা XML, JSON, বা অন্যান্য টেক্সট-ভিত্তিক ফরম্যাটে সংরক্ষণ করতে হবে।

  5. প্রমাণীকরণ সিস্টেম: HTTP তে বেসিক প্রমাণীকরণ Base64 এনকোডিং ব্যবহার করে (যদিও এটি নিরাপত্তার জন্য নয়, কেবলমাত্র এনকোডিংয়ের জন্য)।

  6. ক্রিপ্টোগ্রাফি: বিভিন্ন ক্রিপ্টোগ্রাফিক প্রোটোকল এবং সিস্টেমের অংশ হিসাবে, প্রায়শই কী বা সার্টিফিকেট এনকোড করার জন্য।

  7. কুকি মান: কুকিতে সংরক্ষণের জন্য জটিল ডেটা কাঠামো এনকোড করা।

বিকল্প

যদিও Base64 ব্যাপকভাবে ব্যবহৃত হয়, তবে কিছু পরিস্থিতিতে আরও উপযুক্ত বিকল্প রয়েছে:

  1. URL-নিরাপদ Base64: একটি পরিবর্তন যা "+" এবং "/" এর পরিবর্তে "-" এবং "_" ব্যবহার করে URL এনকোডিং সমস্যা এড়াতে। URL-এ অন্তর্ভুক্ত ডেটার জন্য উপকারী।

  2. Base32: 32-অক্ষরের সেট ব্যবহার করে, আউটপুটকে দীর্ঘায়িত করে কিন্তু মানব পাঠযোগ্যতা এবং কেস অ-সংবেদনশীলতার সাথে।

  3. হেক্স এনকোডিং: হেক্সাডেসিমাল রূপান্তর, যা কম কার্যকর (আকার দ্বিগুণ) কিন্তু খুব সহজ এবং ব্যাপকভাবে সমর্থিত।

  4. বাইনারি স্থানান্তর: বড় ফাইল বা যখন কার্যকারিতা গুরুত্বপূর্ণ, তখন সরাসরি বাইনারি স্থানান্তর প্রোটোকল যেমন HTTP যথাযথ Content-Type হেডার সহ পছন্দসই।

  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 আধুনিক কম্পিউটিংয়ের একটি মৌলিক টুল হিসেবে রয়ে গেছে, বিশেষ করে ওয়েব অ্যাপ্লিকেশন এবং API এর উত্থানের সাথে যা 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. URL-নিরাপদ Base64: স্ট্যান্ডার্ড Base64 "+" এবং "/" অক্ষর ব্যবহার করে যা URL-এ বিশেষ অর্থ রয়েছে। URL প্রসঙ্গের জন্য, URL-নিরাপদ 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