Base64url হলো Base64 এনকোডিংয়ের একটি রূপান্তর যা বিশেষভাবে URL, ফাইলনাম এবং অন্যান্য প্রসঙ্গে ব্যবহারের জন্য ডিজাইন করা হয়েছে যেখানে স্ট্যান্ডার্ড Base64 অক্ষর + ও / সমস্যা তৈরি করে। RFC 4648 Section 5-এ সংজ্ঞায়িত, Base64url + কে - (হাইফেন) দিয়ে এবং / কে _ (আন্ডারস্কোর) দিয়ে প্রতিস্থাপন করে এবং শেষের = প্যাডিং অক্ষর বাদ দেয়। ফলে এমন একটি স্ট্রিং তৈরি হয় যা অতিরিক্ত পার্সেন্ট-এনকোডিং ছাড়াই URL কোয়েরি প্যারামিটার, ফাইলনাম বা HTTP হেডারে সরাসরি এম্বেড করা যায়।
স্ট্যান্ডার্ড Base64 (RFC 4648 Section 4) ৬৪টি অক্ষর ব্যবহার করে: A-Z, a-z, 0-9, + এবং /। URL-এ + ও / অক্ষর সংরক্ষিত: query string-এ + কে স্পেস হিসেবে ব্যাখ্যা করা হয় (application/x-www-form-urlencoded), এবং / হলো path বিভাজক। তাই URL-এর মধ্যে স্ট্যান্ডার্ড Base64 ব্যবহার করতে হলে এই অক্ষরগুলো পার্সেন্ট-এনকোড করতে হয় (%2B, %2F), যা স্ট্রিংয়ের দৈর্ঘ্য বাড়ায় এবং পাঠযোগ্যতা কমায়। Base64url শুরু থেকেই URL-নিরাপদ অক্ষর ব্যবহার করে এই সমস্যা সম্পূর্ণরূপে দূর করে।
Base64url-এর সবচেয়ে উল্লেখযোগ্য ব্যবহার হলো JSON Web Tokens (JWT)-এ। JWT-এর তিনটি অংশ — হেডার, পেলোড এবং সিগনেচার — সবই Base64url-এনকোড করা। OAuth 2.0 PKCE code verifier, WebAuthn চ্যালেঞ্জ মান এবং অনেক API টোকেন স্কিমও Base64url-এর উপর নির্ভর করে। যেকোনো ডেভেলপার যিনি প্রমাণীকরণ, অনুমোদন বা ক্রিপ্টোগ্রাফিক ডেটা আদান-প্রদানের সাথে কাজ করেন তার জন্য এই এনকোডিং বোঝা অপরিহার্য।
এই Base64url টুলটি কেন ব্যবহার করবেন?
সরাসরি আপনার ব্রাউজারে Base64url এবং টেক্সট বা বাইনারি ডেটার মধ্যে রূপান্তর করুন। এনকোডিং ও ডিকোডিং উভয়ই সমর্থিত, প্যাডিং ও অক্ষর প্রতিস্থাপন স্বয়ংক্রিয়ভাবে পরিচালিত হয়। আপনি JWT টোকেন ডিবাগ করছেন, PKCE কোড চ্যালেঞ্জ তৈরি করছেন, পাসওয়ার্ড রিসেট লিঙ্কের জন্য URL-নিরাপদ আইডেন্টিফায়ার তৈরি করছেন, বা WebAuthn ক্রেডেনশিয়াল পরীক্ষা করছেন — এই টুলটি সবকিছু আপনার ব্রাউজারে স্থানীয়ভাবে প্রক্রিয়া করে, কোনো বিলম্ব বা সার্ভার রাউন্ড-ট্রিপ ছাড়াই।
⚡
তাৎক্ষণিক রূপান্তর
আপনি টাইপ করার সাথে সাথে আউটপুট আপডেট হয়। টেক্সটকে Base64url-এ এনকোড করুন বা Base64url কে আবার টেক্সটে ডিকোড করুন — কোনো ফর্ম সাবমিশন বা পেজ রিলোড ছাড়াই।
🔗
URL-নিরাপদ আউটপুট
আউটপুটে শুধুমাত্র এমন অক্ষর থাকে যা URL, ফাইলনাম ও HTTP হেডারে নিরাপদ: A-Z, a-z, 0-9, হাইফেন এবং আন্ডারস্কোর। পার্সেন্ট-এনকোডিংয়ের প্রয়োজন নেই।
🔒
গোপনীয়তা-প্রথম প্রক্রিয়াকরণ
সমস্ত এনকোডিং ও ডিকোডিং আপনার ব্রাউজারে স্থানীয়ভাবে চলে। আপনি এখানে পেস্ট করা JWT টোকেন, OAuth সিক্রেট এবং API কি কখনো কোনো সার্ভারে পাঠানো হয় না।
🏛️
মান-সম্মত বাস্তবায়ন
RFC 4648 Section 5 সঠিকভাবে বাস্তবায়ন করে: - ও _ যথাক্রমে + ও / প্রতিস্থাপন করে, প্যাডিং বাদ দেওয়া হয়। JWT লাইব্রেরি, OAuth 2.0 PKCE এবং WebAuthn বাস্তবায়নের সাথে সামঞ্জস্যপূর্ণ।
Base64url-এর ব্যবহারের ক্ষেত্র
JWT টোকেন পরীক্ষা
JWT লাইব্রেরি আমদানি বা সিগনেচার যাচাই ছাড়াই পৃথক JWT অংশ (হেডার, পেলোড) ডিকোড করে দাবি, মেয়াদ শেষের সময় এবং সাইনিং অ্যালগরিদম পরীক্ষা করুন।
OAuth 2.0 PKCE ফ্লো
PKCE code_verifier ও code_challenge মান তৈরি ও যাচাই করুন। code_challenge_method S256-এর জন্য code_verifier-এর SHA-256 হ্যাশের Base64url-এনকোড করা মান প্রয়োজন।
WebAuthn / FIDO2 ইন্টিগ্রেশন
WebAuthn চ্যালেঞ্জ, credential ID এবং attestation ডেটা ব্রাউজার ও relying party সার্ভারের মধ্যে Base64url স্ট্রিং হিসেবে আদান-প্রদান হয়। নিবন্ধন ও প্রমাণীকরণ ফ্লো ডিবাগ করতে সেগুলো ডিকোড করুন।
API টোকেন তৈরি
পাসওয়ার্ড-রিসেট লিঙ্ক, ইমেইল যাচাইকরণ এবং সেশন আইডেন্টিফায়ারের জন্য র্যান্ডম বাইট থেকে URL-নিরাপদ টোকেন তৈরি করুন। Base64url এমন সংক্ষিপ্ত স্ট্রিং তৈরি করে যা এস্কেপিং ছাড়াই URL-এ কাজ করে।
DevOps ও CI/CD পাইপলাইন
পরিবেশ চলক বা YAML ফাইলে বাইনারি কনফিগারেশন মান (সার্টিফিকেট, কি) Base64url স্ট্রিং হিসেবে সংরক্ষণ করুন। স্ট্যান্ডার্ড Base64 থেকে ভিন্ন, আউটপুটে এমন কোনো অক্ষর নেই যা shell expansion বা YAML সিনট্যাক্সের সাথে সংঘর্ষ করে।
ডেটা ইঞ্জিনিয়ারিং
ফাইলনাম, ডেটাবেস কি বা CSV কলামে ব্যবহারের জন্য বাইনারি আইডেন্টিফায়ার, হ্যাশ বা চেকসাম Base64url-এ এনকোড করুন যেখানে + ও / অক্ষর পার্সিং ভেঙে দিতে বা এস্কেপিং প্রয়োজন করতে পারে।
স্ট্যান্ডার্ড Base64 বনাম Base64url
Base64url স্ট্যান্ডার্ড Base64 থেকে ঠিক তিনটি দিকে আলাদা। এনকোডিং অ্যালগরিদম একই — শুধু অ্যালফাবেট ও প্যাডিং আচরণ পরিবর্তিত হয়:
বৈশিষ্ট্য
স্ট্যান্ডার্ড (RFC 4648 §4)
Base64url (RFC 4648 §5)
Index 62
+
-
Index 63
/
_
Padding
= (required)
Omitted
এই তিনটি পার্থক্যের মানে হলো স্ট্যান্ডার্ড Base64 ও Base64url-এর মধ্যে রূপান্তর সহজ: + কে - দিয়ে, / কে _ দিয়ে প্রতিস্থাপন করুন এবং শেষের = অক্ষর সরিয়ে দিন। বিপরীতে, - কে + দিয়ে, _ কে / দিয়ে প্রতিস্থাপন করুন এবং দৈর্ঘ্যকে ৪-এর গুণিতক করতে প্যাডিং পুনরায় যোগ করুন। বেশিরভাগ ভাষায় নেটিভ Base64url সমর্থন আছে, তাই ম্যানুয়াল রূপান্তর অপ্রয়োজনীয়। উভয় রূপান্তরই সম্পূর্ণ বিপরীতযোগ্য এবং তথ্যহানিমুক্ত, মূল বাইট ক্রম হুবহু সংরক্ষিত থাকে। এই আন্তঃকার্যক্ষমতা RFC 4648 স্পেসিফিকেশন দ্বারা নিশ্চিত, যা উভয় এনকোডিং রূপান্তরকে সংজ্ঞায়িত করে।
এনকোডিং তুলনার সারণি
নিচের সারণিটি স্ট্যান্ডার্ড Base64 ও Base64url দিয়ে একই ইনপুট এনকোড করা দেখায়। লক্ষ্য করুন কীভাবে প্যাডিং অক্ষর (=) বাদ দেওয়া হয় এবং URL-নিরাপদ রূপান্তরে + / / এর বদলে - / _ ব্যবহার করা হয়:
ইনপুট
স্ট্যান্ডার্ড Base64
Base64url (প্যাডিং ছাড়া)
Hello
SGVsbG8=
SGVsbG8
A
QQ==
QQ
1+1=2
MSsxPTI=
MSsxPTI
subject?ref=1
c3ViamVjdD9yZWY9MQ==
c3ViamVjdD9yZWY9MQ
ð (thumbs up)
8J+RjQ==
8J-RjQ
কোড উদাহরণ
জনপ্রিয় ভাষায় Base64url স্ট্রিং এনকোড ও ডিকোড করার পদ্ধতি। প্রতিটি উদাহরণ এমন আউটপুট তৈরি করে যা URL, ফাইলনাম এবং HTTP হেডারে ব্যবহারের জন্য নিরাপদ:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
// Encode to Base64url (no padding)
encoded := base64.RawURLEncoding.EncodeToString([]byte("Hello!"))
fmt.Println(encoded) // → "SGVsbG8h"
// Decode from Base64url
decoded, _ := base64.RawURLEncoding.DecodeString("SGVsbG8h")
fmt.Println(string(decoded)) // → "Hello!"
}
সচরাচর জিজ্ঞাসা
Base64 ও Base64url-এর মধ্যে পার্থক্য কী?
Base64url স্ট্যান্ডার্ড Base64 অ্যালফাবেট থেকে + কে - দিয়ে এবং / কে _ দিয়ে প্রতিস্থাপন করে এবং শেষের = প্যাডিং অক্ষর বাদ দেয়। এটি আউটপুটকে URL, কোয়েরি প্যারামিটার, ফাইলনাম এবং HTTP হেডারে অতিরিক্ত এনকোডিং ছাড়াই ব্যবহারযোগ্য করে তোলে। অন্তর্নিহিত অ্যালগরিদম (বাইটগুলো ৬-বিট গ্রুপে বিভক্ত করে ASCII অক্ষরে ম্যাপ করা) একই। বাস্তবে এর অর্থ হলো Base64url স্ট্রিং URL, ফাইল পাথ এবং HTTP হেডারে কোনো পরিবর্তন ছাড়াই ব্যবহার করা যায়, অথচ স্ট্যান্ডার্ড Base64 স্ট্রিং একই প্রসঙ্গে পার্সেন্ট-এনকোডিং প্রয়োজন করে (+ এর জন্য %2B, / এর জন্য %2F)।
JWT টোকেন কেন স্ট্যান্ডার্ড Base64-এর পরিবর্তে Base64url ব্যবহার করে?
JWT প্রায়ই URL কোয়েরি প্যারামিটার ও HTTP Authorization হেডারে পাঠানো হয়। স্ট্যান্ডার্ড Base64 অক্ষর + ও / URL-এ পার্সেন্ট-এনকোড করতে হতো, যা দৈর্ঘ্য বাড়ায় ও সরল স্ট্রিং তুলনা ভেঙে দেয়। JWT স্পেসিফিকেশন (RFC 7519) ডিফল্টে টোকেন সংক্ষিপ্ত ও URL-নিরাপদ রাখতে প্যাডিং ছাড়া Base64url বাধ্যতামূলক করে।
স্ট্যান্ডার্ড Base64 কে Base64url-এ কীভাবে রূপান্তর করব?
প্রতিটি + কে - দিয়ে, প্রতিটি / কে _ দিয়ে প্রতিস্থাপন করুন এবং সমস্ত শেষের = অক্ষর সরিয়ে দিন। JavaScript-এ: base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')। Python-এ: base64.urlsafe_b64encode(data).rstrip(b'=')। বেশিরভাগ আধুনিক ভাষায় একটি নিবেদিত Base64url এনকোডিং ফাংশনও আছে। এই রূপান্তর সাধারণত প্রয়োজন হয় যখন পুরোনো লাইব্রেরি যা স্ট্যান্ডার্ড Base64 তৈরি করে তা আধুনিক সিস্টেমের সাথে একীভূত করতে হয় যেগুলো Base64url প্রত্যাশা করে, যেমন JWT ভ্যালিডেটর, OAuth 2.0 সার্ভার এবং WebAuthn রিলাইং পার্টি।
Base64url এনকোডিং কি বিপরীতযোগ্য?
হ্যাঁ, Base64url সম্পূর্ণ বিপরীতযোগ্য। ডিকোড করতে, - কে + দিয়ে এবং _ কে / দিয়ে প্রতিস্থাপন করুন, দৈর্ঘ্যকে ৪-এর গুণিতক করতে = প্যাডিং যোগ করুন, তারপর স্ট্যান্ডার্ড Base64 হিসেবে ডিকোড করুন। ডিকোড করা আউটপুট মূল ইনপুটের সাথে বাইট-ফর-বাইট একই।
ডেটা এনক্রিপ্ট করতে কি Base64url ব্যবহার করতে পারি?
না। Base64url একটি এনকোডিং, এনক্রিপশন নয়। এটি বাইনারি ডেটাকে টেক্সট-নিরাপদ ফরম্যাটে রূপান্তর করে কোনো গোপনীয়তা ছাড়াই — যে কেউ এটি ডিকোড করতে পারে। ডেটা সুরক্ষিত করতে হলে প্রথমে একটি সঠিক অ্যালগরিদম (AES, ChaCha20) দিয়ে এনক্রিপ্ট করুন, তারপর পরিবহনের জন্য সাইফারটেক্সটটি Base64url-এ এনকোড করুন। এই উদ্দেশ্যে প্রচলিত এনক্রিপশন অ্যালগরিদমের মধ্যে রয়েছে সিমেট্রিক এনক্রিপশনের জন্য AES-256-GCM এবং অ্যাসিমেট্রিক কি র্যাপিংয়ের জন্য RSA-OAEP। প্রথমে এনক্রিপ্ট করুন, তারপর ফলস্বরূপ সাইফারটেক্সটটি Base64url-এ এনকোড করুন।
Base64url-এ প্যাডিং কেন বাদ দেওয়া হয়?
প্যাডিং অক্ষর (=) অকেজো কারণ ডিকোডার স্ট্রিংয়ের দৈর্ঘ্য থেকে অনুপস্থিত বাইট গণনা করতে পারে: (4 - length % 4) % 4 প্রয়োজনীয় প্যাডিং দেয়। প্যাডিং বাদ দেওয়া স্ট্রিং ছোট করে এবং = অক্ষর এড়ায় যা URL-এ পার্সেন্ট-এনকোড করতে হতো। RFC 4648 Section 5 স্পষ্টভাবে Base64url-এ প্যাডিং বাদ দেওয়ার অনুমতি দেয়।
কোডে প্যাডিং সহ Base64url স্ট্রিং কীভাবে পরিচালনা করব?
কিছু সিস্টেম = প্যাডিং সহ Base64url স্ট্রিং তৈরি করে। বেশিরভাগ ডিকোডার এটি সঠিকভাবে পরিচালনা করে। যদি আপনারটি না করে, ডিকোড করার আগে শেষের = সরিয়ে দিন। বিপরীতভাবে, যদি কোনো লাইব্রেরিতে প্যাডিং প্রয়োজন হয়, তাহলে গণনা করে যোগ করুন: const padded = str + '='.repeat((4 - str.length % 4) % 4)। এটি কাজ করে কারণ প্যাডিং গণনা স্ট্রিংয়ের দৈর্ঘ্য থেকে নির্ধারিত। একটি নির্ভরযোগ্য ইউটিলিটি ফাংশন: function ensurePadding(s) — এটি s-এ সঠিক সংখ্যক = অক্ষর যোগ করে ফেরত দেয় — এটি সমস্ত বৈধ Base64url স্ট্রিংয়ের জন্য কাজ করে, তাতে প্যাডিং থাকুক বা না থাকুক।