টুল
গাইড

Base64 এনকোড / ডিকোড

এনকোডিং

UTF-8-নিরাপদ Base64 এনকোডিং ও ডিকোডিং, ঐচ্ছিক URL-নিরাপদ ভ্যারিয়েন্ট সহ।

100% ক্লায়েন্ট-সাইড কোনো ব্যাকএন্ড নেই
ইনপুট
আউটপুট
এই পৃষ্ঠায়

Base64 কী?#

Base64 হলো শুধুমাত্র 64টি মুদ্রণযোগ্য ASCII অক্ষর (A-Z, a-z, 0-9, +, /, প্যাডিংয়ের জন্য = সহ) ব্যবহার করে নির্বিচার বাইট লেখার একটি উপায়। এটি এজন্য আছে কারণ কম্পিউটিং বিশ্বের বিশাল অংশ টেক্সটের জন্য ডিজাইন করা হয়েছিল — ইমেল বডি, JSON ফিল্ড, HTTP হেডার, data-URI প্রিফিক্স — এবং সেগুলো কাঁচা বাইটে আটকে যায়, বিশেষত উচ্চ বিট সেট সহ বাইট বা তাদের ভেতরে এম্বেডেড কন্ট্রোল কোডে। Base64 হলো সেই সাধারণ ভাষা যখন আপনার বাইনারি-আকৃতির ডেটাকে একটি শুধু-টেক্সট চ্যানেলে বাঁচাতে হয়।

প্রতিটি তিনটি ইনপুট বাইট (24 বিট) চারটি base64 অক্ষরে পরিণত হয় (প্রতিটি 6 বিট এনকোড করে)। এজন্যই base64 আউটপুট সর্বদা চারের গুণিতক দৈর্ঘ্যের হয়, এবং এজন্যই এটি মূল বাইটের চেয়ে প্রায় 33% বড় — অতিরিক্ত অংশ হলো মুদ্রণযোগ্যতার মূল্য। যখন ইনপুট দৈর্ঘ্য তিনের গুণিতক নয়, তখন শেষে এক বা দুটি = প্যাডিং অক্ষর উপস্থিত হয়।

এই পৃষ্ঠাটি base64 UTF-8 এর সাথে নিরাপদে এনকোড ও ডিকোড করে। মানুষ যে ফাঁদে সব সময় পড়ে: একটি স্ট্রিংকে সরাসরি btoa()-তে পাস করলে এটি InvalidCharacterError নিক্ষেপ করে যেই মুহূর্তে এতে একটি নন-ASCII অক্ষর (é, 中文, একটি ইমোজি) থাকে। সমাধান হলো প্রথমে টেক্সটকে UTF-8 বাইটে এনকোড করা, তারপর base64 — যা ঠিক এই টুলটি করে, তাই café নিক্ষেপ না করে সঠিকভাবে রাউন্ড-ট্রিপ করে।

ব্যবহারবিধি#

  1. টুলবারের উপরের বাম কোণার এনকোড / ডিকোড টগল দিয়ে দিক নির্বাচন করুন।
  2. বাঁদিকের ইনপুট পেইনে টাইপ করুন বা পেস্ট করুন।
    • এনকোড মোডে ইনপুটটিকে UTF-8 টেক্সট হিসেবে গণ্য করা হয়।
    • ডিকোড মোডে ইনপুট হলো একটি base64 স্ট্রিং। হোয়াইটস্পেস সহ্য করা হয়।
  3. আপনার যদি base64url অক্ষরমালা প্রয়োজন হয় (+ এবং /-এর বদলে - এবং _, প্যাডিং ছিন্ন) তবে URL-নিরাপদ টিক দিন। এটি যা JWT এবং অনেক স্বাক্ষরিত-URL স্কিম প্রত্যাশা করে।
  4. ফলাফল ডানদিকের আউটপুট পেইনে লাইভ উপস্থিত হয়। নেওয়ার জন্য কপি ক্লিক করুন।
  5. একটি প্রদর্শন জোড়া ফেলে দিতে নমুনা ব্যবহার করুন, এবং উভয় পেইন রিসেট করতে মুছুন

মূল বৈশিষ্ট্য#

  • উভয় দিকে UTF-8 নিরাপদ। এনকোডিং প্রথমে টেক্সটকে TextEncoder দিয়ে চালায়, তাই মাল্টিবাইট অক্ষর কখনো বিস্ফোরিত হয় না; ডিকোডিং বাইটগুলোকে TextDecoder দিয়ে চালায় যাতে মূল টেক্সট হুবহু পুনরুদ্ধার হয়।
  • মানক এবং URL-নিরাপদ অক্ষরমালা। একটি চেকবক্স ক্লাসিক base64 (+/=) এবং base64url (-_ প্যাডিং ছাড়া) এর মধ্যে স্যুইচ করে, ডিকোডে সঠিক পুনরায়-প্যাডিং সহ।
  • বিশুদ্ধ ক্লায়েন্ট-সাইড। কনভার্সন শুধুমাত্র আপনার ব্রাউজারে চলে — কোনো ব্যাকএন্ড বা নেটওয়ার্ক অনুরোধ নেই। একটি সংবেদনশীল টোকেন এখানে পেস্ট করা তা কোথাও পাঠায় না।
  • লাইভ স্ট্যাটাস লাইন। পেইনগুলোর নিচের বারটি এনকোড/ডিকোড ত্রুটি রিপোর্ট করে (উদাহরণস্বরূপ, একটি %-আকৃতির বা ছোট করা ইনপুট) নীরবে আবর্জনা তৈরি করার বদলে।

ব্যবহারিক উদাহরণ#

এনকোড এবং মানক (URL-নিরাপদ নয়) মোডে, ASCII টেক্সট Hello, World! হয়ে যায়:

SGVsbG8sIFdvcmxkIQ==

শেষের দুটি = দেখায় যে 13-বাইট ইনপুটটি তিনের গুণিতক ছিল না — এটি প্রত্যাশিত, ভুল নয়।

UTF-8 হ্যান্ডলিং ততক্ষণই গুরুত্বপূর্ণ হয়ে ওঠে যতক্ষণ না আপনি ASCII ছাড়েন। café এনকোড করলে (যেখানে é হলো দুটি UTF-8 বাইট, c3 a9) দেয়:

Y2Fmw6k=

আপনি যদি একটি কনসোলে সরাসরি btoa("café") কল করতেন, তবে তা নিক্ষেপ করত। এই টুলটি তা করে না, কারণ এটি প্রথমে UTF-8 বাইট এনকোড করে।

URL-নিরাপদ মোড অক্ষরমালাকে পুনরায় লেখে যাতে আউটপুট কখনো এমন অক্ষর বহন না করে যা একটি URL ভুল পড়বে: + হয়ে যায় -, / হয়ে যায় _, এবং শেষের = প্যাডিং সরানো হয় (ডিকোডে স্বয়ংক্রিয়ভাবে পুনরায় যোগ করা হয়)। উপরের মানক আউটপুট নিন, SGVsbG8sIFdvcmxkIQ== — URL-নিরাপদ মোডে দুটি প্যাডিং = ছিন্ন করা হয়, দেয় SGVsbG8sIFdvcmxkIQ+//-/_ অদলবদল শুধু তখনই কিছু পরিবর্তন করে যখন সেই অক্ষরগুলো আসলে আউটপুটে উপস্থিত হয়, যা ঘটতে প্রবণ যেমন হ্যাশ ডাইজেস্ট বা এলোমেলো টোকেনের মতো বাইনারি পেলোডে — ঠিক সেই ধরনের ডেটা যা আপনি আরও এস্কেপ ছাড়াই একটি URL পাথ বা কোয়েরি প্যারামিটারে বসান।

প্রশ্নোত্তর#

আমার ডিকোড করা টেক্সট মোজিবাকে হিসেবে দেখাচ্ছে। কী হয়েছে?#

প্রায় সবসময়, আপনি যে base64 ডিকোড করেছেন তা ছিল কোনো অন্য ক্যারেক্টার সেটে (প্রায়শই Latin-1 বা Windows-1252) বাইটের এনকোডিং, UTF-8 নয়। এই টুলটি বাইটগুলোকে UTF-8 হিসেবে ডিকোড করে, তাই একটি Latin-1-এনকোডেড é (0xe9, একটি একক বাইট) বৈধ UTF-8 নয় এবং ভুল দেখায়। অন্য প্রান্তটি মূল টেক্সট কীভাবে এনকোড করেছিল তা খুঁজে বের করুন, বা প্রথমে এটি UTF-8 হিসেবে পুনরায় এনকোড করুন।

মানক base64 নাকি base64url — আমার কোনটি দরকার?#

মানক (+/=) এমন কিছুর জন্য ডিফল্ট যা URL-এ যাচ্ছে না: ইমেল সংযুক্তি, data: URI, বাইনারি বহনকারী JSON ফিল্ড। যখন আউটপুট একটি URL পাথ, কোয়েরি স্ট্রিং, বা একটি JWT সেগমেন্টে বসবে সেখানে URL-নিরাপদ চালু করুন, যেখানে +, /, এবং = হয় পার্সিং ভাঙে বা ট্রান্সপোর্ট দ্বারা বিকৃত হয়। যেকোনো ফর্ম ডিকোড করা স্বয়ংক্রিয়ভাবে গ্রহণযোগ্য।

এনকোড করা আউটপুট কেন আমার ইনপুটের চেয়ে বড়?#

এটি অন্তর্নিহিত, বাগ নয়। Base64 প্রতি অক্ষরে 8-এর বদলে 6 বিট প্যাক করে, তাই আউটপুট ইনপুটের প্রায় 4/3 আকারের — প্রায় 33% ওভারহেড। খুব ছোট ইনপুটের জন্য এটি মূলের তুলনায় আরও বড় দেখাতে পারে, কারণ নির্দিষ্ট কাঠামো প্রাধান্য পায়।

এটি কি একটি base64 স্ট্রিং ডিক্রিপ্ট বা ক্র্যাক করতে পারে?#

না — base64 হলো একটি এনকোডিং, এনক্রিপশন নয়। এটি ডিজাইন অনুসারে সম্পূর্ণ উল্টোদিকে ফেরানো যায় এবং কোনো কী বহন করে না। স্ট্রিং সহ যে কেউ এটি ডিকোড করতে পারে। আপনার যদি সত্যিই গোপনীয়তা প্রয়োজন হয়, প্রথমে এনক্রিপ্ট করুন (উদাহরণস্বরূপ একটি প্রমাণীকৃত-এনক্রিপশন স্কিম সহ) এবং তারপর ট্রান্সপোর্টের জন্য সাইফারটেক্সটটি base64-এনকোড করুন।