কেন বেস 64 আউটপুটে একটি অসঙ্গতি আছে?


12

আমি জাভা ভিত্তিক নিও 4j গ্রাফ ডাটাবেস লুবুন্টু 15.04 এ ব্যবহার করছি।

নিও 4j এইচটিটিপি প্রমাণীকরণ শিরোনামটি 'ব্যবহারকারীর নাম: পাসওয়ার্ড' (কোটস সহ নয়) এর বেস 64 এনকোডিং ব্যবহার করে। ওয়্যারশার্ক ব্যবহার করে আমি নীও ৪ জে দ্বারা উত্পাদিত বেস 6464 কোডটি দেখতে পাচ্ছি।

তবে যদি আমি একই স্ট্রিংটিকে এনকোড করতে উবুন্টু কোর্টিলস বেস 64 ব্যবহার করি তবে আমি কিছুটা আলাদা এনকোডিং পাব। এই এনকোডিংটি neo4j দ্বারা গৃহীত নয়।

দুটি এনকোডিং সঠিক ব্যবহারকারীর ডিকোড: পাসওয়ার্ড স্ট্রিং

উদাহরণ

ব্যবহারকারীর নাম = neo4jএবং পাসওয়ার্ড =@N

Neo4j প্রত্যাশিত হিসাবে ডিকোড neo4j:@Nহিসাবে এনকোডযুক্ত মান দেয়bmVvNGo6QE4=neo4j:@N

$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N

উবুন্টু coreutils base64আয় এনকোড করা মানকে neo4j:@Nযেমন bmVvNGo6QE4K(যা শেষ অক্ষর মধ্যে পৃথক) কিন্তু এখনও সঠিকভাবে decodes;

$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N

কেন? ধারাবাহিক এনকোডিং পেতে আমার কী দরকার?


3
নোট করুন যে =সাধারণ বেস 64 এ প্যাডিং হয় (এবং কেবল শেষে বৈধ হয়)। একটি এনকোডেড স্ট্রিংয়ের প্যাডিং রয়েছে এবং অন্যটি (বা আরও সাধারণভাবে, দুটি স্ট্রিংয়ের বিভিন্ন পরিমাণে প্যাডিং থাকে না) এই ঘটনাটি একটি মৃত শর্ত যে দুটি পৃথক দৈর্ঘ্যের এবং সম্ভবত একরকম হতে পারে না।
একটি সিভিএন

উত্তর:


56

আপনি বিভিন্ন স্ট্রিং এনকোডিং করছেন (কিছুটা)

$ echo 'bmVvNGo6QE4=' | base64 --decode | od -c
0000000   n   e   o   4   j   :   @   N
0000010
$ echo 'neo4j:@N' | od -c
0000000   n   e   o   4   j   :   @   N  \n
0000011

echoএকটি ট্রেলিং নিউলাইন চরিত্র যুক্ত করে। এটি বিভিন্ন এনকোডিংগুলিতে বাড়ে।

printfপরিবর্তে ব্যবহার করুন, যার আউটপুট নির্দিষ্টকরণ আরও সঠিক:

$ printf '%s' 'neo4j:@N' | base64              
bmVvNGo6QE4=

10
দুর্দান্ত উত্তর, upvated। নোট যে $ echo -n "neo4j:@N" | base64কাজ করে।
ডগ স্মিথিস

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