এমডি 5 হ্যাশ মানটি ব্যাশ এবং পিএইচপি থেকে পৃথক [সদৃশ]


60

এই প্রশ্নের ইতিমধ্যে এখানে একটি উত্তর আছে:

আমি "হ্যালো" স্ট্রিংয়ের এমডি 5 যোগ ( এমডি 5 সাম ব্যবহার করে) উত্পন্ন করার চেষ্টা করেছি । লিনাক্স, পিএইচপি-র এমডি 5 () ফাংশনের পাশাপাশি এমডি 5sum অনুবাদকদের বিভিন্ন অনলাইন পাঠ্য হিসাবে আমি বিভিন্ন পদ্ধতি ব্যবহার করে দেখেছি।

echo "hello" | md5sum

এবং

echo "hello" > file && md5sum file

ফল দিয়েছে b1946ac92492d2347c6235b4d2611184। তবে, পিএইচপি এর এমডি 5 () ফাংশন এবং প্রায় সমস্ত অনলাইন জেনারেটর আউটপুট দেয় 5D41402ABC4B2A76B9719D911017C592

কারণ কি?


38
প্রতিধ্বনিত - "হ্যালো"
মার্টিন ইয়র্ক

উত্তর:


80

ডিফল্ট হিসাবে, echoআউটপুট শেষে একটি নতুন লাইন অক্ষর অন্তর্ভুক্ত। তবে, পিএইচপি এবং আপনি যে অনলাইন সাইটগুলি ব্যবহার করেছেন সেগুলিতে নতুন লাইন অন্তর্ভুক্ত নয়। নতুন লাইন চরিত্রটি দমন করতে, -nপতাকাটি ব্যবহার করুন :

echo -n "hello" | md5sum

আউটপুট:

5d41402abc4b2a76b9719d911017c592 -

দেখা: help echo


বা প্রিন্টফের সাথে:

printf "%s" "hello" | md5sum

আমি POSIX দ্বারা অনির্দিষ্ট আচরণের উপর নির্ভর করে এমনটির আগে আরও ব্যাপকভাবে সামঞ্জস্যপূর্ণ ফর্মটি দেখানোর পরামর্শ দেব ।
চার্লস ডাফি

ধন্যবাদ. আমি প্রথমে তার নিজের উদাহরণ এবং প্রতিধ্বনির আচরণ দিয়ে সমস্যাটি দেখাতে পছন্দ করি।
সাইরাস

7
অপের অপারেটিং সিস্টেমটি না জানলে আপনি জানেন না যে "তাদের নিজস্ব উদাহরণ" এর সংশোধিত সংস্করণটি আসলে কাজ করবে। যদি তাদের লিনাক্স স্ট্রিপড ডাউন ব্যাসবক্স ব্যবহার করে তবে echo -nএটি প্রতিধ্বনিত হতে পারে -n
চার্লস ডাফি

আমি ওপির অপারেটিং সিস্টেম জানি।
সাইরাস

তারা তাদের কার্নেল নির্দিষ্ট করে, তবে তারা এর চেয়ে বেশি কোথায় বলে?
চার্লস ডাফি

100

@ সাইরাস এর উত্তর একেবারে সমাধান করার উপায়ের সাথে ঠিক ঠিক রয়েছে - ব্যাখ্যা করার জন্য, echoএটি ব্যবহার করার পরে স্ট্রিংয়ের শেষে একটি নতুন লাইন আউটপুট দেবে। আপনি যেমন এই অনলাইন আউটপুটটিতে দেখতে পাচ্ছেন, helloএকটি নতুন লাইনের আউটপুটগুলির সাথে ঠিক আগে আপনি এমডি 5 পেয়ে যাচ্ছেন। নিউলাইনটি -nদমন করে ব্যবহার করে এবং তারপরে আপনি প্রত্যাশিত ফলাফলটি দেবেন।

এখানে চিত্র বর্ণনা লিখুন

সম্পাদনা করুন :

আপনি এটিকে আউটপুট দিলে আপনি এটি স্পষ্ট দেখতে পাচ্ছেন hexdump, যা সেখানে বাইটগুলির হেক্সাডেসিমাল দেখায়।

$ echo "str_example" | hd
00000000  73 74 72 5f 65 78 61 6d  70 6c 65 0a              |str_example.|

স্ট্রিংয়ের শেষে 0a( \n) দেখুন

$ echo -n "str_example" | hd
00000000  73 74 72 5f 65 78 61 6d  70 6c 65                 |str_example|

সঙ্গে -nপ্রতিধ্বনি একটি নতুন লাইন (করা না \n) শেষ

এখন একটি খালি স্ট্রিং সঙ্গে

$ echo  "" | hd
00000000  0a                                                |.|

শুধু নিউ লাইন চরিত্র

$ echo -n  "" | hd

খালি স্ট্রিং, সুতরাং hexdumpকোনও আউটপুট দেখায় না


2
পাইপ আরো আকর্ষণীয় হবে echo helloএবং echo -n helloকরতে hexdump -Cযথাক্রমে;)
টম ইয়ান

19
আমি এর বিরুদ্ধে প্রস্তাব দিচ্ছি echo -n, যেহেতু এটি মানহীন এবং অবিচ্ছিন্নভাবে সমর্থনযোগ্য (এর জন্য একক ইউনিক্স স্পেকecho এবং স্যাভেন মাসচেকের অসঙ্গতিগুলির আরও বিশদ ক্যাটালগ দেখুন )। আপনি এটি অবিচ্ছিন্নভাবে কাজ করতে চান, printfপরিবর্তে ব্যবহার করুন; এটি ব্যবহার করা কিছুটা জটিল (আপনার মুদ্রিত হওয়া ডেটা ছাড়াও আপনাকে একটি ফর্ম্যাট স্ট্রিং নির্দিষ্ট করতে হবে) তবে সমস্যা এড়াতে আইএমও এর মূল্য worth এই ক্ষেত্রে, printf "%s" "hello"কৌতুক করবেন।
গর্ডন ডেভিসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.