কেন একটি বেস 64 এনকোড স্ট্রিংয়ের শেষে একটি = চিহ্ন থাকে


320

আমি জানি base64এনকোডিং কী এবং কীভাবে base64সি # তে এনকোডিং গণনা করা যায়, তবে আমি বেশ কয়েকবার দেখেছি যে যখন আমি একটি স্ট্রিংকে বেস 64 এ রূপান্তর করি, তখন একটি =শেষে রয়েছে।

কয়েকটি প্রশ্ন এলো:

  1. একটি base64স্ট্রিং সবসময় দিয়ে শেষ হয় =?
  2. কেন একটি =শেষে যুক্ত করা হয়?

9
এটি সি # এর সাথে একেবারেই করার নেই।
BoltClock

19
আসলে এটি সি # এর সাথে সম্পর্কিত, সমস্ত ভাষায় = অন্তর্ভুক্ত হবে না, উদাহরণস্বরূপ অনেক পার্ল লাইব্রেরি = বাদ দেয় না, সুতরাং ব্যবহারকারী যে পরিবেশটি ব্যবহার করছেন তা জেনে রাখা আসলেই প্রাসঙ্গিক।
জ্যাকব 0

এটিকে একরকম মনে হয় যে এটি বেশিরভাগ ক্ষেত্রে এটি নিখরচায়করণের কার্যকর কার্যকারিতা তৈরি করে কারণ এটি যথেষ্ট সনাক্তযোগ্য।
ডিজিও

6
@ ব্যবহারকারী 1167442 বেস 64 হস্তক্ষেপের জন্য নয়। এটি বাইনারি ডেটা (বা ইউনিকোড এবং অন্যান্য বিশেষ অক্ষরের সাথে স্ট্রিং) স্ট্রিং হিসাবে পরিবহনের জন্য।
এনএইচ।

উত্তর:


268

এটি প্যাডিং হিসাবে কাজ করে ।

আরও সম্পূর্ণ উত্তর হ'ল একটি বেস 64 এনকোডেড স্ট্রিংটি সর্বদা একটি দিয়ে শেষ হয় না =, কেবলমাত্র এক বা দুটি দিয়ে শেষ হবে =যদি তাদের যথাযথ দৈর্ঘ্যে স্ট্রিং প্যাড করার প্রয়োজন হয়।


3
"একটি মামলায় প্যাডিং অক্ষরগুলির প্রয়োজনীয়তা একাধিক বেস 64 এনকোডযুক্ত ফাইলগুলি সংযুক্ত করা ating"
আন্দ্রে পুয়েল

1
@ অ্যান্ড্রুপুয়েল: পুনঃসংক্ষেপ এক একক =যথেষ্ট হবে। আপনি যদি সীমানা ফিরে পেতে চান তবে একটি টার্মিনেটর সর্বদা উপস্থিত থাকা উচিত (এবং এখনও কেবলমাত্র একটি চর প্রয়োজন)। বেস 64 এর পুরো প্যাডিং ধারণাটি কেবল একটি ব্রেইনফার্ট ...
6502

5
যদিও লিঙ্কটি বেস 64 এর সাথে সম্পূর্ণ অপ্রাসঙ্গিক।
এনএইচ।

1
আমি কেবল চাই একটি প্রাসঙ্গিক এবং নির্ভরযোগ্য লিঙ্ক পোস্ট করা হয়েছে যা base64চিত্রগুলি এবং উদাহরণগুলির সাথে দক্ষতার সাথে প্যাডিং সম্পর্কে ব্যাখ্যা করে । উইকিপিডিয়ায় বর্তমান লিঙ্কটি @NH এর মতো একেবারেই অপ্রাসঙ্গিক। উল্লিখিত.
Fr0zenFyr

1
@ Fr0zenFyr আপনি একটি লিঙ্ক চান, en.wikipedia.org/wiki/Base64#Output_padding বেশ ভাল। তবে বদরের উত্তর আসলেই আরও ভাল একটি (এটি এখনও ভোটে ধরা দেয়নি)।
এনএইচ।

309

1-কোন

২- একটি সংক্ষিপ্ত উত্তর হিসাবে: 65৫ তম অক্ষর ("=" চিহ্ন) কেবলমাত্র একটি বার্তা এনকোডিংয়ের চূড়ান্ত প্রক্রিয়াতে পরিপূরক হিসাবে ব্যবহৃত হয়।

আপনার স্ট্রিংটিতে 3 টি অক্ষরের সংখ্যা থাকলে আপনার '=' চিহ্ন থাকবে না, কারণ Base64এনকোডিংয়ে প্রতিটি তিনটি বাইট (8 বাইট) লাগে এবং এএসসিআইআই মানক হিসাবে এটি চারটি মুদ্রণযোগ্য অক্ষর হিসাবে উপস্থাপন করে ।

বিশদ:

(ক) আপনি যদি এনকোড করতে চান

এবিসিডিডিএফজি <=> [ ABC] [ DEF] [G

Base64(তারা সম্পূর্ণ হয়) প্রথম ব্লক এবং দ্বিতীয় সঙ্গে (4 অক্ষর উত্পাদক) চুক্তি হবে কিন্তু তৃতীয় জন্য এটি একটি ডবল যোগ হবে ==4 প্রয়োজন characters.Thus সম্পূর্ণ করতে আউটপুটে, ফল কী হবে QUJD REVG RW == (স্থান ব্যতীত)

(খ) আপনি যদি এনকোড করতে চান ...

ABCDEFGH <=> [ ABC] [ DEF] [GH

একইভাবে, =4 টি অক্ষর পাওয়ার জন্য আউটপুট শেষে এটি কেবলমাত্র একটি একক যোগ করবে ফলাফলটি কোয়েজড আরভিজি আর0 জি = (স্থান ছাড়াই) হবে


26
এটি অন্যান্য উত্তর এবং এমনকি উইকিপিডিয়া তুলনায় আরও সম্পূর্ণ এবং স্পষ্ট এবং স্বীকৃত উত্তরের চেয়ে বেশি ভোটের প্রাপ্য হওয়া উচিত যা উইকিপিডিয়া লিঙ্কের দিকে ইঙ্গিত ছাড়া কিছুই করে না। আপনাকে কুডোস! সম্মত!
এএনওউইউইউটাউন

2
@ আনিউগুইআইএনটিউইনডাউনউটে উইকিপিডিয়া লিঙ্কটি গৃহীত সমাধানে ভুল, এটি বেস 64৪ এর প্যাডিংয়ের সাথে কিছুই করার নেই। সঠিক পৃষ্ঠাটি নীচে
লেগোলাসের



66

উইকিপিডিয়া থেকে :

চূড়ান্ত '==' অনুক্রমটি ইঙ্গিত দেয় যে শেষ গ্রুপটিতে কেবল একটি বাইট ছিল এবং '=' ইঙ্গিত করে যে এতে দুটি বাইট রয়েছে।

সুতরাং, এটি কিছু ধরণের প্যাডিং।


16
  1. না।
  2. বেস 64-এনকোড স্ট্রিংটি দৈর্ঘ্যে 4 টি বর্ণের একাধিকতে প্যাড করতে, যাতে এটি সঠিকভাবে ডিকোড করা যায়।

3
আমি প্রান্তটি অপসারণ করেছি =এবং 1 মিলিয়ন স্ট্রিংয়ের জন্য এটি পরীক্ষা করেছি । ডিকোডিং সবসময় মেলে।
vivek_23


11

সমান চিহ্ন (=) বেস 64 এনকোডিংয়ের নির্দিষ্ট ফর্মগুলিতে প্যাডিং হিসাবে ব্যবহৃত হয়। Wikipedia নিবন্ধটি করুন Base64- সমস্ত বিবরণ আছে।


2
"==" কেন 1 বাইট এবং "=" 2 বাইট হয় তার যুক্তি আপনি ব্যাখ্যা করতে পারেন? আমি এটা বুঝতে পারি না। কীভাবে ইনপুট আসবে: "কোনও শারীরিক আনন্দ।" "YW55IGNhcm5hbCBwbGVhc3VyZS4 =" ফলাফল পেতে পারে, যখন "যে কোনও শারীরিক আনন্দ" ফলাফল পেতে পারে "YW55IGNhcm5hbCBwbGVhc3VyZQ =="?
নাল

14
এটি এমন নয় যে '==' 1 বাইট এবং '=' 2 বাইট। এটি এমন ক্ষেত্রে আপনার সর্বদা আপনার পুরো স্ট্রিংয়ে 4 বাইটের একাধিক থাকা দরকার। সুতরাং আপনি এটি না পাওয়া পর্যন্ত '=' চিহ্ন দিয়ে প্যাড করুন। প্রথম স্ট্রিংয়ে দ্বিতীয় স্ট্রিংয়ের তুলনায় আরও একটি চরিত্র রয়েছে, সুতরাং একটি কম '=' প্যাডিং প্রয়োজন।
স্যাম হোলোয়ে

2
এই উত্তরটি কি কোনও মন্তব্য হওয়ার কথা?
Fr0zenFyr

9

এটা প্যাডিং। Http://en.wikedia.org/wiki/Base64 থেকে :

তত্ত্ব অনুসারে, ডিকোডিংয়ের জন্য প্যাডিং চরিত্রের প্রয়োজন নেই, যেহেতু অনুপস্থিত বাইটের সংখ্যা বেস 64 এর সংখ্যা থেকে গণনা করা যায়। কিছু বাস্তবায়নে, প্যাডিং চরিত্রটি বাধ্যতামূলক, অন্যদের জন্য এটি ব্যবহার করা হয় না। প্যাডিং অক্ষরগুলির জন্য প্রয়োজনীয় এমন একটি ক্ষেত্রে একাধিক বেস 64 এনকোডযুক্ত ফাইলগুলি সংযুক্ত করা।


1
"যে এক মামলায় প্যাডিং অক্ষরগুলি প্রয়োজন তার অংশটি হ'ল একাধিক বেস 64 এনকোডযুক্ত ফাইলগুলি সংযুক্ত করে।" ভূল. উদাহরণস্বরূপ যখন দুটি বেস 64 ফাইল সংযুক্ত করার সময় যেখানে প্রতিটি ফাইলের উত্স বাইট 3 বাইট দীর্ঘ হয় বেস64 64 স্ট্রিং 4 অক্ষর দীর্ঘ হবে এবং কোনও প্যাডিং বাইট নেই। আপনি যখন এই দুটি বেস 64 স্ট্রিংকে একত্রীকরণ করেন তখন কোনওটি শুরু হয় এবং কোনটি সংক্ষিপ্ত স্ট্রিংয়ের উপর ভিত্তি করে সোলে থামবে তা বলার উপায় নেই। সুতরাং যে সাহায্য করতে বেস 64 প্যাডিং উপর নির্ভর করে কাজ করে না। এই সমস্যাটি বাইট দৈর্ঘ্যের সাথে যে কোনও ফাইলের জন্য 3 দ্বারা সমানভাবে বিভাজক হিসাবে উপস্থিত থাকবে
রন সি

1
আমি অনুমান করি এর অর্থ এমন ক্ষেত্রে যেখানে চূড়ান্ত ফলাফলটি ইনপুটগুলির সংমিশ্রণ হওয়া উচিত। যেমন decode(encode(A)+encode(B))=A+Bপ্যাডিংয়ের সাথে কাজ করে তবে ছাড়াই নয়।
টমাস লিওনার্ড

সম্ভবত তবে এ জাতীয় সীমিত ব্যবহার যখন এনকোডযুক্ত স্ট্রিংগুলি একসাথে সংযুক্ত করা হয় তখন এনকোডযুক্ত স্ট্রিংগুলি পৃথক করার সাধারণ ক্ষেত্রে প্যাডিং চর (গুলি) উপর নির্ভর করতে দেয় না। আমি কেবল এটি বিকাশকারীদের সহায়তা করার জন্য উল্লেখ করেছি যা তারা ভাবতে পারে যে তারা সেভাবে এটি ব্যবহার করতে পারে।
রন সি

1
আমি মনে করি আপনার আপত্তি সত্যিই মাত্র প্যাডিং এবং সীমিতকরণের ধারণাগুলির মধ্যে পার্থক্য তুলে ধরে। কনটেনটেশনের ফলাফলগুলি সাধারণত এটিকে বিপরীতমুখী করার জন্য পর্যাপ্ত তথ্য অন্তর্ভুক্ত করে বলে আশা করা যায় না। "C3dpenpsZXJz" আসলে "c3dpenps" + "ZXJz" বা "c3dp" + "enpsZXJz" কিনা আপনি জানবেন না। তবে আপনি এও জানেন না যে "সুইজলার্স" মূলত "সুই" + "জজলার্স" বা "সুইজল" + "এরস" ছিল কিনা।
গারগান্টুচেট

1
সম্পর্কিত বেস 64 প্যাডিংয়ের উত্তর থেকে আমার মন্তব্য অনুলিপি করা হচ্ছে :> বেস64 64 কনটেনটেশন ['=' প্যাডিং সহ] এনকোডারগুলিকে অংশের আকারগুলি তিনটির একাধিক স্থানে প্রান্তিককরণের ভার ছাড়াই সমান্তরালভাবে বড় অংশগুলিতে প্রক্রিয়া করার অনুমতি দেয়। একইভাবে, বাস্তবায়নের বিশদ হিসাবে, সেখানে কোনও এনকোডার থাকতে পারে যাতে কোনও আকারের অভ্যন্তরীণ ডেটা বাফারটি ফ্লাশ করা দরকার যা তিনটির একাধিক নয়।
আন্দ্রে ডি

7

http://www.hcidata.info/base64.htm

64 মেরিকে "মেরি ছিল" এনকোডিং

এই উদাহরণে আমরা একটি সাধারণ পাঠ্য স্ট্রিং ব্যবহার করছি ("মেরি ছিল") তবে নীতিটি ডেটা কী তা বিবেচনা করে না (যেমন গ্রাফিক্স ফাইল)। ইনপুট ডেটার প্রতিটি 24 বিট আউটপুট 32 বিট রূপান্তর করতে, বেস 64 এনকোডিং 24 বিটগুলি 6 বিটের 4 অংশে বিভক্ত করে। প্রথম সমস্যাটি আমরা লক্ষ্য করি যে "মেরি হ্যাড" 3 বাইটের একাধিক নয় - এটি 8 বাইট দীর্ঘ। এই কারণে, বিটের শেষ গ্রুপটি কেবল 4 বিট দীর্ঘ long এর প্রতিকারের জন্য আমরা '0' এর দুটি অতিরিক্ত বিট যুক্ত করি এবং শেষে '=' রেখে এই সত্যটি মনে করি। যদি বেস 64 তে রূপান্তরিত করার জন্য পাঠ্য স্ট্রিংটি 7 বাইট দীর্ঘ হয় তবে সর্বশেষ গোষ্ঠীতে 2 বিট থাকত। এই ক্ষেত্রে আমরা '0' এর অতিরিক্ত চারটি বিট যুক্ত করতে পারি এবং শেষে '==' রেখে এই সত্যটি মনে রাখি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.