সুতরাং, আপনি bcrypt ব্যবহার করতে চান? অসাধারণ! তবে, ক্রিপ্টোগ্রাফির অন্যান্য ক্ষেত্রগুলির মতো, আপনি নিজে এটি করা উচিত নয়। কীগুলি পরিচালনা করা, বা সল্ট সংরক্ষণ করা বা এলোমেলো সংখ্যা উত্পন্ন করার মতো কিছু সম্পর্কে আপনার যদি উদ্বিগ্ন হওয়ার দরকার হয় তবে আপনি এটি ভুল করছেন।
কারণটি সহজ: ব্র্যাক্রিপ্ট স্ক্রু আপ করা এত তুচ্ছ সহজ । প্রকৃতপক্ষে, আপনি যদি এই পৃষ্ঠার প্রায় প্রতিটি টুকরো কোডের দিকে লক্ষ্য করেন তবে আপনি লক্ষ্য করবেন যে এটি কমপক্ষে এই সাধারণ সমস্যাগুলির একটি লঙ্ঘন করছে।
এটি মুখোমুখি, ক্রিপ্টোগ্রাফি হার্ড।
বিশেষজ্ঞদের জন্য এটি ছেড়ে দিন। এই লাইব্রেরিগুলি রক্ষণাবেক্ষণ করা যাদের কাজ এটি তাদের জন্য ছেড়ে দিন। আপনার যদি সিদ্ধান্ত নেওয়ার দরকার হয় তবে আপনি এটি ভুল করছেন।
পরিবর্তে, কেবল একটি লাইব্রেরি ব্যবহার করুন। আপনার প্রয়োজনীয়তার উপর নির্ভর করে বেশ কয়েকটি বিদ্যমান।
লাইব্রেরি
আরও কয়েকটি সাধারণ এপিআইয়ের একটি ব্রেকডাউন এখানে।
পিএইচপি 5.5 এপিআই - (5.3.7+ এর জন্য উপলব্ধ)
পিএইচপি 5.5 থেকে শুরু করে হ্যাশিং পাসওয়ার্ডগুলির জন্য একটি নতুন এপিআই চালু করা হচ্ছে। 5.3.7+ এর জন্য (আমার দ্বারা) রক্ষণাবেক্ষণ করা একটি শিম সামঞ্জস্য গ্রন্থাগারও রয়েছে। এটি পিয়ার-পর্যালোচনা এবং প্রয়োগ বাস্তবায়নের সহজ হওয়ার সুবিধা রয়েছে ।
function register($username, $password) {
$hash = password_hash($password, PASSWORD_BCRYPT);
save($username, $hash);
}
function login($username, $password) {
$hash = loadHashByUsername($username);
if (password_verify($password, $hash)) {
//login
} else {
// failure
}
}
সত্যিই, এটি অত্যন্ত সাধারণ হওয়ার লক্ষ্য।
সম্পদ:
জেন্ড \ ক্রিপ্ট \ পাসওয়ার্ড \ বিক্রিপ্ট (5.3.2+)
এটি পিএইচপি 5.5 এর অনুরূপ অন্য একটি এপিআই এবং একই উদ্দেশ্যে কাজ করে।
function register($username, $password) {
$bcrypt = new Zend\Crypt\Password\Bcrypt();
$hash = $bcrypt->create($password);
save($user, $hash);
}
function login($username, $password) {
$hash = loadHashByUsername($username);
$bcrypt = new Zend\Crypt\Password\Bcrypt();
if ($bcrypt->verify($password, $hash)) {
//login
} else {
// failure
}
}
সম্পদ:
PasswordLib
পাসওয়ার্ড হ্যাশিংয়ের ক্ষেত্রে এটি কিছুটা ভিন্ন পদ্ধতি। কেবলমাত্র bcrypt সমর্থন করার পরিবর্তে, পাসওয়ার্ডলিব প্রচুর সংখ্যক হ্যাশিং অ্যালগরিদমকে সমর্থন করে। এটি মূলত প্রসঙ্গে যেখানে আপনার নিয়ন্ত্রণের বাইরে থাকতে পারে এমন উত্তরাধিকারসূত্র এবং পৃথকীকরণ ব্যবস্থার সাথে সামঞ্জস্যতা আপনার সমর্থন প্রয়োজন useful এটি বিপুল সংখ্যক হ্যাশিং অ্যালগরিদমকে সমর্থন করে। এবং 5.3.2+ সমর্থিত
function register($username, $password) {
$lib = new PasswordLib\PasswordLib();
$hash = $lib->createPasswordHash($password, '$2y$', array('cost' => 12));
save($user, $hash);
}
function login($username, $password) {
$hash = loadHashByUsername($username);
$lib = new PasswordLib\PasswordLib();
if ($lib->verifyPasswordHash($password, $hash)) {
//login
} else {
// failure
}
}
তথ্যসূত্র:
- উত্স কোড / ডকুমেন্টেশন: গিটহাব
PHPASS
এটি এমন একটি স্তর যা বিক্রিপ্টকে সমর্থন করে, তবে আপনার যদি পিএইচপি> = 5.3.2 এ অ্যাক্সেস না থাকে তবে কার্যকরভাবে যথেষ্ট শক্তিশালী অ্যালগরিদম সমর্থন করে ... এটি আসলে পিএইচপি 3.0+ সমর্থন করে (যদিও বিসিক্রিপ্টের সাথে নয়)।
function register($username, $password) {
$phpass = new PasswordHash(12, false);
$hash = $phpass->HashPassword($password);
save($user, $hash);
}
function login($username, $password) {
$hash = loadHashByUsername($username);
$phpass = new PasswordHash(12, false);
if ($phpass->CheckPassword($password, $hash)) {
//login
} else {
// failure
}
}
সম্পদ
দ্রষ্টব্য: পিএইচপিএসএস বিকল্পগুলি ওপেনওয়ালে হোস্ট করা হয় না, সেগুলি বিভিন্ন প্রকল্প !!!
বিসিপ্রিপ্ট সম্পর্কে
যদি আপনি লক্ষ্য করেন তবে এই লাইব্রেরির প্রত্যেকটিই একটি একক স্ট্রিং প্রদান করে। বিসিক্রিপ অভ্যন্তরীণভাবে কীভাবে কাজ করে তার কারণেই। এবং সে সম্পর্কে উত্তরগুলির একটি টোন রয়েছে। এখানে আমি একটি নির্বাচন লিখেছি যে আমি এখানে অনুলিপি / পেস্ট করব না, তবে লিঙ্ক করুন:
শেষ করি
বিভিন্ন পছন্দ আছে। যা আপনি চয়ন আপনার উপর নির্ভর করে। যাইহোক, আমি চাই অত্যন্ত সুপারিশ করছি যে আপনি আপনার জন্য এই পরিচালনা করার জন্য উপরে লাইব্রেরি ব্যবহার করুন।
আবার আপনি যদি crypt()
সরাসরি ব্যবহার করেন তবে আপনি সম্ভবত কিছু ভুল করছেন। যদি আপনার কোড ব্যবহার করছে hash()
(অথবা md5()
বা sha1()
) সরাসরি, আপনি প্রায় কিছু উল্টাপাল্টা করছেন।
কেবল একটি লাইব্রেরি ব্যবহার করুন ...