मुझे एक सादे टेक्स्ट पासवर्ड और पिछले हैश को BCrypt की checkpw (plaintextpw, pasthash) विधि का उपयोग करके मिलान करने में समस्या हो रही है।पासवर्ड हैश तुलना के लिए jBCrypt का उपयोग कैसे करें?
एक रजिस्टर सर्वलेट में मैं दर्ज पासवर्ड लेता हूं, हैश यह बीसीआरपीटी के हैशप (पासवर्ड, जेनसाल्ट) विधि का उपयोग करके इसे डीबी में संग्रहीत करता है।
लॉगिन सर्वलेट में मैं उस हैश को डीबी से लेता हूं, और यह देखने के लिए कि यह दर्ज पासवर्ड से मेल खाता है या नहीं, यह देखने के लिए बीसीआरपीटी के चेकप्यू का उपयोग करें।
यह कभी मेल नहीं खाता है। यह मेरे नियमित जावा ऐप में ठीक काम करता है, बस वेबपैप में नहीं। कोई भी नहीं इस समस्या हो रही है तो मैं समझ मैं इसे गलत कर किया जाना चाहिए:
//RegisterServlet
String pw_hash = BCrypt.hashpw(request.getParameter("password"), BCrypt.gensalt());
String loginInsertString = "insert into login (loname,lopassword,locustomerid)" +
" VALUES ('" + username + "','" + pw_hash + "','" + loginInsert + "');";
//LoginServlet
ResultSet rs = stmt.executeQuery("select lopassword from login where loname = '" +
loginName + "';");
while(rs.next()){
dbhash = rs.getString(1);
}
out.println(dbhash+"<br>");
if (BCrypt.checkpw(request.getParameter("password"), dbhash)) {
out.println("It matches");
}else{
out.println("It does not match");
}
BCrypt एपीआई बहुत सरल है - here
मैं क्योंकि साथ BCrypt आप माना जाता है कि डॉन 'नमक भंडारण नहीं कर रहा हूँ टी करना है - तो मैं गलत क्या कर रहा हूँ?
सोल्वड - डेटाबेस फ़ील्ड pw_hash 80 वर्णों में संग्रहीत किया गया था .. एक बीक्रिप्ट हैश से 20 अधिक। हैश को ट्रिम करना या डाटाबेस फ़ील्ड को 60 वर्णों में रीसेट करना। मनाइए कि यह किसी और के लिए सहायक हो। – VNorman
कृपया अपने आप को उत्तर दें और इसे स्वीकार करें, प्रश्न को बंद करने के बजाय, "शीर्षक" को इसके शीर्षक में जोड़ने के बजाय – Bergi