কেন এতগুলি হ্যাশ এবং এনক্রিপ্ট করা স্ট্রিং সমান চিহ্নে শেষ হয়?


64

আমি সি # এবং এমএসএসকিউএল তে কাজ করি এবং আপনি যেমন আশা করেন আমি আমার পাসওয়ার্ডগুলি সল্ট এবং হ্যাশ করে রাখি।

যখন আমি কোনও এনভারচর কলামে সঞ্চিত হ্যাশটি দেখি (উদাহরণস্বরূপ বাক্স অ্যাস্পনেট সদস্যতার সরবরাহকারী) out আমি সর্বদা আগ্রহী ছিলাম কেন উত্পন্ন লবণ এবং হ্যাশ মান সর্বদা এক বা দুটি সমান চিহ্নগুলিতে শেষ বলে মনে হয়।

এনক্রিপশন অ্যালগরিদমগুলির সাথে কাজ করার সময় আমি একই জিনিস দেখেছি, এটি কি এই কাকতালীয় ঘটনা বা এর কোনও কারণ আছে?


19
অন্যদিকে, আপনি যদি NVARCHAR ক্ষেত্রে বেস 64-এনকোডেড বাইনারি ডেটা সঞ্চয় করে থাকেন তবে আমি আপনার 6x স্টোরেজ বর্জ্যের জন্য কাঁদছি! একটির জন্য, বেস 64 এএসসিআইআইয়ের নীচের অর্ধেকের মধ্যে কেবলমাত্র 64 টি অক্ষর থাকতে পারে (যাতে আপনার অর্ধেক সংরক্ষণের জন্য কেবল ভোচারার প্রয়োজন)। দুটির জন্য, বেস 64 ডেটার প্রতিটি বাইট 1-4 টি অক্ষরে বিস্ফোরিত করে। এসকিউএল সার্ভারের ইতিমধ্যে একটি ভারবাইনারি টাইপ রয়েছে যা আপনার হ্যাশগুলি এনকোডিং থেকে ব্লাট ছাড়াই সংরক্ষণ করার পক্ষে যথেষ্ট সক্ষম এবং এর তুলনাতে কোলেশন সম্পর্কে কোনও চিন্তা করে না ... :-)
জিম্বোবমগজি

3
@ উইলিওহিলার, হ্যাশটি কোনওভাবে সংরক্ষণ করতে হবে। বেস might৪ নিখুঁত স্টোরেজ মিডিয়াম নাও হতে পারে তবে এর সাথে অন্তর্নিহিত কোনও ভুল নেই। যদি hash("my password")অ্যারে উত্পাদন করে [1,2,3,4,5]এবং আমাকে সেই মানগুলি একটি ডাটাবেসে সংরক্ষণ করতে হয় তবে স্ট্রিংটি সংরক্ষণের চেয়ে আরও খারাপ পছন্দ রয়েছে AQIDBAU=(অবশ্যই, যদি হ্যাশ ফাংশনটি ইতিমধ্যে স্ট্রিং তৈরি করে, তবে বেস 64 এটি এনকোড করে কিছুটা নির্বোধ বলে মনে হয়)। )
ব্রায়ান এস

2
@ উইলিওহিলার আমি মনে করি আপনি পয়েন্টটি মিস করছেন। ব্রায়ান এস যা লিখেছিলেন তা পুনরায় পড়ুন - তিনি হ্যাশিংয়ের জন্য বেস 64 এর বৈশিষ্ট্যগুলির বিষয়ে কথা বলছিলেন না - এটি অযৌক্তিক বেস 64 হবে হ্যাশিং অ্যালগরিদম নয়। তিনি বলছেন যে বেস 6464 আকারে একটি হ্যাশ (একটি হ্যাশ ফাংশন / অ্যালগরিদম দ্বারা উত্পাদিত) সংরক্ষণ করার মধ্যে কোনও ভুল নেই।
অ্যান্ড্রু সাবিনিখ

3
ওপি বলে যে সে হ্যাশ সংরক্ষণ করে এবং এটি সমান চিহ্ন সহ শেষ হয়। এটি সূচিত করে যে সে বেস 64 কে এনকোডিংয়ের সাথে হ্যাশিং বিভ্রান্ত করছে। যদি বিন্দুটি হ'ল এটি হ্যাশ বেসড 64 এর জন্য ঠিক আছে তবে অবশ্যই, তবে এর সাথে কিছু করার কী আছে?
উইলি হুইলারের

2
হ্যাঁ, শেষ পর্যন্ত বুঝতে পারলাম কী চলছে। আমি আমার এসএসএইচ পাবলিক এবং প্রাইভেট কী ফাইলগুলিতে সন্ধান করেছি এবং লক্ষ্য করেছি যে এগুলিরও = / === শেষ রয়েছে। এগুলি বাইট অ্যারেগুলির বেস 64 এনকোডিংগুলি, যেমন ব্রায়ানএস এবং জেসপ্রি বর্ণনা করে। ধন্যবাদ বন্ধুরা.
উইলি হুইলার

উত্তর:


95

এই হ্যাশযুক্ত স্ট্রিংটি (সাধারণত?) বেস 64 ফর্ম্যাটে কোড করা হয় এবং দৈর্ঘ্য (বাইট সংখ্যা) তিনটি দ্বারা বিভাজ্য করতে স্ট্রিং প্যাডিংয়ের জন্য সমান চিহ্ন ব্যবহার করা হয়। উইকিপিডিয়া এটি বেশ ভালভাবে ব্যাখ্যা করেছে: http://en.wikedia.org/wiki/Base64


36

এটি বেস 64 এনকোডিং প্যাডিং হতে পারে?

'==' ক্রমটি ইঙ্গিত দেয় যে শেষ গোষ্ঠীতে কেবল একটি বাইট ছিল এবং '=' ইঙ্গিত করে যে এতে দুটি বাইট রয়েছে। উপরের উদাহরণটি ব্যাখ্যা করে যে উপরের উদ্ধৃতিটির পুরো ইনপুট কেটে নেওয়া কীভাবে আউটপুট প্যাডিং পরিবর্তন করে:

http://en.wikipedia.org/wiki/Base64#Output_padding

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