আমার কি ব্র্যাক্রিপ্ট দিয়ে লবণ সঞ্চয় করা দরকার?


189

বিক্রিপ্টের জাভাদোকের পাসওয়ার্ড কীভাবে এনক্রিপ্ট করা যায় তার জন্য এই কোডটি রয়েছে:

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 

একটি সরলপাখির পাসওয়ার্ড যা আগে ধাবিত হয়েছে তার সাথে মেলে কিনা তা পরীক্ষা করতে, চেকপিউ পদ্ধতিটি ব্যবহার করুন:

if (BCrypt.checkpw(candidate_password, stored_hash))
    System.out.println("It matches");
else
    System.out.println("It does not match");

এই কোড স্নিপেটগুলি এলোমেলোভাবে উত্পন্ন লবণটি ফেলে দেওয়া হয় বলে বোঝায়। এটি কি এই ঘটনা, বা এটি কি কেবল একটি বিভ্রান্তিকর কোড স্নিপেট?

উত্তর:


214

লবণটি হ্যাশে অন্তর্ভুক্ত করা হয় (একটি বেস 64-শৈলীর বিন্যাসে এনকোড করা হয়)।

উদাহরণস্বরূপ, traditionalতিহ্যবাহী ইউনিক্স পাসওয়ার্ডে লবণটি পাসওয়ার্ডের প্রথম দুটি অক্ষর হিসাবে সংরক্ষণ করা হয়েছিল। বাকী অক্ষরগুলি হ্যাশ মান উপস্থাপন করে। পরীক্ষক ফাংশন এটি জানে এবং লবণটি আবার বের করার জন্য হ্যাশটিকে আলাদা করে তোলে।


59
নুনটি পাসওয়ার্ডে অন্তর্ভুক্ত। সুতরাং আপনি লবণ সংরক্ষণ করতে হবে না।
স্বপ্নলীল মুখোপাধ্যায়

2
তার জন্য ধন্যবাদ. আমি আশা করি তারা জাভাদোকটিতে বলেছিলেন :) (আমি উত্সটির দিকে চেয়েছি এবং নিশ্চিত হয়েছি - তবে আমি আগে যা খুঁজছিলাম তা আমি জানতাম না)
রোডিও ক্লাউন

1
ধন্যবাদ - আমি এটিও বের করার চেষ্টা করছিলাম! এখন আমি ভাবছি এটি ভাল ধারণা কিনা। আলাদাভাবে আলাদা করে রাখার চেয়ে হ্যাশে লবণ রাখার কি কোনও সুবিধা / অসুবিধা আছে?
আদম

8
@ অ্যাডাম - যেহেতু লবণ এলোমেলোভাবে উত্পাদিত হয়, এর অর্থ আপনার ডাটাবেসে দুটি জিনিস সংযুক্ত করার কোনও পদ্ধতি থাকা দরকার না।
রোডিও ক্লাউন

আমি উত্স কোডটি একবার দেখেছি এবং আবিষ্কার করেছি যে যদিও লবনের আর্গুমেন্টের জন্য জাভাডকটি সম্ভবত "বিসিক্রিপট.জেনসাল্ট ব্যবহার করে উত্পন্ন হয়েছে", আমি পেয়েছি যে আপনাকে জেনসাল্ট () পদ্ধতিটি ব্যবহার করতে হবে অথবা আপনি ব্যতিক্রম পেয়েছেন = /
the_new_mr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.