আমি এটিকে একটি ইউআরএল রাখতে 64৪ টি এনকোড ডেটা বেস করতে চাই এবং তারপরে এটি আমার এইচটিটিপিএইচেন্ডেলার মধ্যে ডিকোড করব।
আমি খুঁজে পেয়েছি যে বেস 64৪ এনকোডিং একটি '/' অক্ষরের জন্য মঞ্জুরি দেয় যা আমার ইউরিপ্লেপলেট মিলকে গোলমেলে ফেলবে। তারপরে আমি দেখতে পেলাম যে উইকিপিডিয়া থেকে "URL এর জন্য পরিবর্তিত বেস 64" এর ধারণা রয়েছে:
ইউআরএল বৈকল্পিকের জন্য একটি পরিবর্তিত বেস 64 উপস্থিত রয়েছে, যেখানে কোনও 'প্যাডিং' = 'ব্যবহৃত হবে না এবং আদর্শ বেস 64 এর' + 'এবং' / 'অক্ষর যথাক্রমে' - 'এবং' _ 'দ্বারা প্রতিস্থাপিত হবে, যাতে URL এনকোডার / ডিকোডার ব্যবহার করে আর প্রয়োজন হয় না এবং এনকোডযুক্ত মানের দৈর্ঘ্যের উপর কোনও প্রভাব ফেলবে না, একইভাবে এনকোডযুক্ত ফর্মটি আপেক্ষিক ডাটাবেস, ওয়েব ফর্ম এবং অবজেক্ট আইডেন্টিফায়ারিকে সাধারণভাবে ব্যবহারের জন্য অক্ষত রেখে দেয়।
.NET ব্যবহার করে আমি "ইউআরএল জন্য পরিবর্তিত বেস 64" পদ্ধতি ব্যবহার করে বেসিক বেস 64 এনকোডিং এবং ডিকোডিং থেকে আমার বর্তমান কোডটি সংশোধন করতে চাই। কেউ কি এই কাজ করেছে?
ডিকোড করার জন্য, আমি জানি এটির এমন কিছু দিয়ে শুরু হয়:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
তবে, আমি শেষ পর্যন্ত এক বা দুটি '=' অক্ষর যুক্ত করতে চাই যা কিছুটা আরও জটিল দেখায়।
আমার এনকোডিং যুক্তিটি কিছুটা সহজ হওয়া উচিত:
// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);
// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');
আমি ইউএসএল স্ট্যাকওভারফ্লো এন্ট্রির জন্য বেস 64 তে গাইড দেখেছি , তবে এটির একটি পরিচিত দৈর্ঘ্য রয়েছে এবং তাই তারা শেষে প্রয়োজনীয় সমান চিহ্নের সংখ্যাটিকে হার্ডকোড করতে পারে।