সেখানে সংশোধন করার ইনপুট ডেটা পাইথন মডিউল করুন Base64- এর b64decode পদ্ধতি ইনপুট ডেটা প্রক্রিয়া করতে সক্ষম করতে এখানে বর্ণিত, বা, আরো নির্দিষ্টভাবে এবং ও.পি. সঙ্গে সঙ্গতিপূর্ণ, দুটি উপায় আছে কিছু একটি অ-ধরা ব্যতিক্রম উত্থাপন ছাড়াই:
- ইনপুট ডেটার শেষে কল করুন == বেস 64.b64 ডিকোড (...) কল করুন
যদি এটি একটি ব্যতিক্রম উত্থাপন করে, তবে
আমি। চেষ্টা করে / বাদে এটি ধরুন,
আ। (আর?) ইনপুট ডেটা থেকে কোনও = অক্ষর স্ট্রিপ করুন (এনবি এটির প্রয়োজন নাও হতে পারে),
III। ইনপুট ডেটাতে A == যুক্ত করুন (A == পি == মাধ্যমে কাজ করবে),
ঈ। বেস এ 64.b64decode (...) - এ A == - সংযুক্ত ইনপুট ডেটার সাথে কল করুন
উপরের আইটেম 1 বা আইটেম 2 থেকে ফলাফল পছন্দসই ফলাফল দেবে।
আদেশ সহকারে
এটি গ্যারান্টি দেয় না যে ডিকোডযুক্ত ফলাফলটি মূলত যা এনকোড করা হয়েছিল, তবে এটি (কখনও কখনও?) ওপিকে কাজ করার জন্য যথেষ্ট পরিমাণে দেবে:
এমনকি দুর্নীতির সাথেও আমি বাইনারিটিতে ফিরে যেতে চাই কারণ আমি এখনও এএসএন 1 স্ট্রিম থেকে কিছু দরকারী তথ্য পেতে পারি ")।
দেখুন আমরা কি জানি এবং অনুমিতি নিচে।
টি এল; ডিআর
বেস 64.b64decode (...) এর কয়েকটি দ্রুত পরীক্ষা থেকে
এটি প্রদর্শিত হয় যে এটি অ- [A-Za-z0-9 + /] অক্ষর উপেক্ষা করে; এতে চারটি পার্স করা গোষ্ঠীতে শেষ অক্ষর (গুলি) না থাকলে সেগুলিকে উপেক্ষা করা অন্তর্ভুক্ত রয়েছে , যার ক্ষেত্রে = গুলি ডিকোডিংটি সমাপ্ত করে (a = b = c = d = abc =, এবং a = হিসাবে একই ফলাফল দেয়) = খ == সি == এব ==) এর একই ফলাফল দেয়।
এটিতে আরও উপস্থিত হয় যে সংযুক্ত সমস্ত অক্ষর বিন্দুটির পরে উপেক্ষা করা হবে যেখানে base64.b64decode (...) গ্রুপের চতুর্থ হিসাবে একটি = থেকে ডিকোডিং সমাপ্ত করে।
উপরের বেশ কয়েকটি মন্তব্যে উল্লিখিত হিসাবে, শূন্য, বা এক, বা দুটি, = গুলি প্যাডিং প্রয়োজন হয় ইনপুট ডেটার শেষে যখন [সেই বিন্দুতে বিভক্ত অক্ষরের সংখ্যা] 4, মান 0 বা 3 হয়, বা যথাক্রমে 2। সুতরাং, উপরের আইটেম 3 এবং 4 থেকে, ইনপুট ডেটাতে দুই বা ততোধিক = গুলি যুক্ত করা সেই ক্ষেত্রে যে কোনও [ভুল প্যাডিং] সমস্যা সংশোধন করবে।
তবুও, ডিকোডিং সেই ক্ষেত্রে পরিচালনা করতে পারে না যেখানে [পার্সড অক্ষরগুলির মোট সংখ্যা 4] 1 হয়, কারণ তিনটি ডিকোডড বাইটের একটি গ্রুপে প্রথম ডিকোডেড বাইট উপস্থাপন করতে কমপক্ষে দুটি এনকোডযুক্ত অক্ষর লাগে। ইন উন এনকোডেড ইনপুট ডেটা নষ্ট, এই [n modulo 4] = 1 ক্ষেত্রে কখনো ঘটে, কিন্তু ওপি বলেছেন যে অক্ষর অনুপস্থিত হতে পারে যেমন, এটা এখানে ঘটতে পারে। এটা কেন কেবল সংযোজন = গুলি করবে সব সময় নয় কাজ, এবং কেন সংযোজন হয় একটি == যখন সংযোজন == না কাজ করবে। এনবি ব্যবহার করে [এ] সবই স্বেচ্ছাসেবক: এটি ডিকোডডের সাথে কেবল সাফ (শূন্য) বিট যুক্ত করে, যা সঠিক বা সঠিক নাও হতে পারে, তবে এখানে বস্তুটি নির্ভুলতা নয় তবে বেস 64.b64decode (...) দ্বারা ব্যতিক্রম সংঘটিত হয় না ।
আমরা ওপি থেকে যা জানি এবং বিশেষত পরবর্তী মন্তব্যগুলি তা
- এটি সন্দেহ করা হয় যে বেস 64-এনকোডড ইনপুট ডেটাতে ডেটা (অক্ষর) নেই
- বেস 64 এনকোডিংটি স্ট্যান্ডার্ড 64 প্লেস-ভ্যালু প্লাস প্যাডিং ব্যবহার করে: এজেড; AZ; 0-9; + +; /; = প্যাডিং হয়। এটি নিশ্চিত, বা কমপক্ষে পরামর্শ দেওয়া হয়েছে, এটি
openssl enc ...
কাজ করে এমন সত্য দ্বারা ।
অনুমিতি
- ইনপুট ডেটাতে মাত্র 7-বিট ASCII ডেটা থাকে
- একমাত্র ধরণের দুর্নীতির মধ্যে এনকোডযুক্ত ইনপুট ডেটা নেই
- ওপিতে কোনও অনুপস্থিত এনকোডড ইনপুট ডেটার সাথে সম্পর্কিত হওয়ার পরে কোনও বিন্দুতে ডিকোড হওয়া আউটপুট ডেটার বিষয়ে যত্ন নেই
GitHub
এই সমাধানটি বাস্তবায়নের জন্য এখানে একটি মোড়ক দেওয়া হচ্ছে:
https://github.com/drbitboy/missing_b64
base64.b64decode(strg, '-_')
? এটি কোনও অগ্রাধিকার, আপনি কোনও নমুনা ডেটা সরবরাহ করার জন্য বিরক্ত না করেই আপনার সমস্যার সম্ভবত পাইথন সমাধান। প্রস্তাবিত "পদ্ধতিগুলি" হ'ল ডিবুগের পরামর্শ, সরবরাহিত তথ্যের অভাবের কারণে প্রয়োজনীয় "হিট অ্যান্ড মিস"।