মূল পোস্টার হিসাবে আমারও একই প্রশ্ন ছিল এবং এটি প্রক্রিয়াটি বোঝার জন্য চারপাশে দেখার এবং বিভিন্ন জিনিস চেষ্টা করার জন্য খানিকটা সময় নিয়েছিল। যেমন ইতিমধ্যে অন্যদের দ্বারা ইঙ্গিত করা হয়েছে, লবণ চূড়ান্ত হ্যাশ সাথে সংযুক্ত করা হয়। সুতরাং এর অর্থ কয়েকটি জিনিস:
- অ্যালগরিদম অবশ্যই লবণের দৈর্ঘ্য জানতে হবে
- চূড়ান্ত স্ট্রিংয়ে লবণের অবস্থানও জানতে হবে। উদাহরণস্বরূপ যদি বাম বা ডান থেকে একটি নির্দিষ্ট সংখ্যা দ্বারা অফসেট হয়।
এই দুটি জিনিস সাধারণত প্রয়োগে কঠোরভাবে কোড করা হয় যেমন bcryptjs এর জন্য bcrypt বাস্তবায়ন উত্স লবণের দৈর্ঘ্য 16 হিসাবে সংজ্ঞায়িত করে
var BCRYPT_SALT_LEN = 16;
সুতরাং কেউ যদি ম্যানুয়ালি এটি করতে চায় তবে ধারণার পিছনে মৌলিক ধারণাটি বর্ণনা করার জন্য, এটি নীচের মতো দেখাবে। লাইব্রেরি রয়েছে যখন আপনি এটি করতে পারেন তখন আমি নিজের মতো জিনিসগুলি প্রয়োগের প্রস্তাব দিই না।
var salt_length = 16;
var salt_offset = 0;
var genSalt = function(callback)
{
var alphaNum = '0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ';
var salt = '';
for (var i = 0; i < salt_length; i++) {
var j = Math.floor(Math.random() * alphaNum.length);
salt += alphaNum[j];
}
callback(salt);
}
var shar2 = function(str) {
}
var hash = function(passwordText, callback)
{
var passwordHash = null;
genSalt(function(salt){
passwordHash = salt + shar2(passwordText + salt);
});
callback(null, passwordHash);
}
var compare = function(passwordText, passwordHash, callback)
{
var salt = passwordHash.substr(salt_offset, salt_length);
validatedHash = salt + shar2(passwordText + salt);
callback(passwordHash === validatedHash);
}
var encryptPassword = function(user)
{
hash(user.pass, function(err, passwordHash){
user.pass = passwordHash;
});
return user;
}
var checkPassword = function(passwordText, user)
{
compare(passwordText, user.pass, function(result){
if (result){
console.log('Correct Password');
}
else {
console.log('Incorrect Password');
}
});
}