কেন একটি স্ট্রিং এর বেস 64 "\ n" থাকে?


84
$ echo -n "apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407" | base64
YXBmanhraWMtb215dW9id2QzMzk4MDVhazo2MGEwNmNkMmRkZmFkNjEwYjk0OTBkMzU5ZDYwNTQw
Nw==

আউটপুট এর আগে একটি রিটার্ন আছে Nw==লিনাক্সে বেস 64 উত্পন্ন করার সঠিক উপায় কী?

টার্মিনাল স্ক্রিনশট


5
আপনি কি নিশ্চিত যে আউটপুটটিতে একটি নতুন লাইন রয়েছে, এবং এটি কেবল আপনার উইন্ডো মোড়ানো নয়? এই আদেশটি ম্যাকের জন্য আমার পক্ষে ভাল কাজ করেছিল। আপনি কোন ওএস ব্যবহার করছেন?
ইয়ান

47
আরএফসি 2045, যা বেস 64 সংজ্ঞায়িত করেছে, 76 টি অক্ষরের (সর্বাধিক) পরে একটি নতুন লাইন আবশ্যক। আপনার উদাহরণটি সঠিক উপায়ে নয় বলে আপনি কী ভাবছেন ?
এমসাল্টারস

24
@ এসএমএল্টারস আরএফসি 4648 বিশেষত সেই সমস্যাটিকে সম্বোধন করে। বাস্তবায়নগুলি এই ডকুমেন্টের উল্লেখ উল্লেখটি নির্দিষ্ট সংখ্যক অক্ষরের পরে লাইন ফিড যুক্ত করার জন্য বেস এনকোডারগুলিকে স্পষ্টভাবে নির্দেশ না দিলে বেস-এনকোডড ডেটাতে লাইন ফিড যুক্ত করা উচিত না। => এই প্রয়োগটি আরএফসি 4648 অনুসারে ভুল, যতক্ষণ না এটি 'প্লেইন' বেস 64-এনকোডড আউটপুট উত্পাদন করে বলে দাবি করে। আরও মজার বিষয় হল, জিএনইউ বেস 64 (প্রশ্নে?) ম্যানপেজগুলি বিশেষত আরএফসি 3548 কে বোঝায়, যা ডিফল্টরূপে কোনও মোড়ানো নির্দিষ্ট করে না এবং কোনটি আরএফসি 4648 অপ্রচলিত করে।
বব

4
@ বোবি: আরপিএসের এপিআই স্থিতির জন্য কিছুটা কম শ্রদ্ধা রয়েছে; একটি বেস 64 সরঞ্জাম কেবল স্ক্রিপ্টগুলি না ভেঙে তার আউটপুট ফর্ম্যাটটি পরিবর্তন করতে পারে না।
এমসাল্টারস

2
@ এসএমএলটারদের আমি নিশ্চিত হতে পারি না যে কোনও পুরানো সংস্করণটি বিদ্যমান নেই, তবে জিএনইউ বেস 64 লেখা হয়েছিল 2004 এবং এএএএফসিটি সর্বদা আরএফসি 3548 অনুসরণ করার দাবি করেছিল। আরএফসি 3548-তে একই "লাইন ফিড যুক্ত করা উচিত নয়" ধারা রয়েছে use এমনকি মূল প্রয়োগটিও ছিল "ভুল"। খুব কমপক্ষে, এটির প্রয়োগটি এর নথির সাথে মেলে না। যাইহোক, আপনি কেন ওপির উদাহরণটি সঠিক এবং একটি আরএফসি রেফারেন্সের জন্য জিজ্ঞাসা করেছিলেন; আমার প্রতিক্রিয়া হ'ল সঠিক আরএফসি যা বাস্তবে বিচ্ছিন্নভাবে বেস 64 সংজ্ঞা দেয়। যদি আপনার উত্তরটি "reasonsতিহাসিক কারণে" হয় তবে তা হ'ল, তবে ওপি এখানে ভুল নয়।
বব

উত্তর:


151

চেষ্টা করুন:

echo -n "apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407" | base64 -w 0

থেকে man base64:

-w, অক্ষর (ডিফল্ট ) এর --wrap=COLS
পরে এনকোডড লাইনগুলি মোড়ানো । লাইন মোড়ানো অক্ষম করতে ব্যবহার করুন ।COLS760


17
ওহ মানুষ, আমি সবসময় কেবল এই মাধ্যমে পাইপ করেছি tr। একটি "সঠিক উপায়" আছে তা জেনে রাখা ভাল।
স্কোর_উন্ডারে

ডিফল্ট মানটি শূন্য নয় কেন তা সম্পর্কে ব্যাখ্যাটি আমার জন্য একটি মিস্ট্রি।
ধেরিক 21

1
@ ধেরিক আমার ধারণা এটি পাঠ্য প্রক্রিয়াজাতকরণ সরঞ্জামগুলির প্রতি সৌজন্য। base64পাঠ্য হিসাবে নির্বিচারে বাইনারি ডেটা এনকোড করে। যে সরঞ্জামগুলি পাঠ্যের প্রত্যাশা করে সেগুলি সাধারণত একবারে একটি লাইন পড়ে এবং খুব দীর্ঘ লাইনগুলি ভালভাবে ডিল করে না । যদি -w 0ডিফল্ট হয় তবে আপনি কেবলমাত্র একটি লাইন পাঠ্যের ডিফল্টরূপে পেয়ে যাবেন; ইনপুট বড় হলে প্রচুর পরিমাণে দীর্ঘ লাইন। এটি ডিফল্টভাবে মোড়ানো ভাল to আমি মনে করি 76মনোনীত করা হয়েছে কারণ এটি সামান্য কম এর 80যা টার্মিনাল জন্য-স্বতন্ত্র মান কেমন
কামিল ম্যাকিয়েরোভস্কি

@ কামিলম্যাসিওরওস্কি তথ্যের জন্য আপনাকে ধন্যবাদ। যতবার আমি base64কমান্ডটি ব্যবহার করেছিলাম তা পাস করার জন্য -w 0আমি যখনই প্রয়োজন (এবং যখন আমি ভুলে গিয়েছিলাম, তখন অদ্ভুত জিনিসগুলি ঘটতে পারে ...), তাই এই ডিফল্ট আচরণটি আমার কাছে খুব অদ্ভুত ছিল।
ধেরিক

54

এটি সেই সিস্টেমে কমিলের জবাবের চেয়ে নিকৃষ্ট, যা -wবিকল্পগুলির পক্ষে সমর্থন করে base64তবে এটি যখন উপলব্ধ না হয় (যেমন আলপাইন লিনাক্স, একটি আর্চ লিনাক্স initramfsহুক ইত্যাদি), আপনি নিজেই বেস 64 এর আউটপুট প্রক্রিয়া করতে পারেন:

base64 some_file.txt | tr -d \\n

এটি হিংস্র শক্তি পদ্ধতির; প্রোগ্রামটি সহযোগিতা করার পরিবর্তে, আমি trস্টাডআউটে প্রতিটি নতুন লাইন নির্বিচারে স্ট্রিপ করতে ব্যবহার করছি ।

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