Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Interview question

How does password encoding work in Spring Security (BCryptPasswordEncoder)? स्प्रिंग सिक्योरिटी में पासवर्ड एन्कोडिंग कैसे काम करती है (BCryptPasswordEncoder)?

Answer

Spring Security never stores or compares plain-text passwords. A PasswordEncoder bean, typically BCryptPasswordEncoder, hashes the password with a random salt and a configurable work factor (strength) before it is persisted, and the same encoder's matches() method is used to compare a raw login password against the stored hash.

BCrypt is preferred over faster hashes like MD5 or SHA because it's intentionally slow and its work factor can be increased over time as hardware gets faster, making brute-force and rainbow-table attacks impractical even if the password database is leaked.

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder(12); // strength factor
}

String hashed = passwordEncoder.encode(rawPassword);
boolean matches = passwordEncoder.matches(rawPassword, hashed);

स्प्रिंग सिक्योरिटी कभी भी प्लेन-टेक्स्ट पासवर्ड स्टोर या तुलना नहीं करता। एक PasswordEncoder बीन, आमतौर पर BCryptPasswordEncoder, पासवर्ड को स्टोर करने से पहले रैंडम सॉल्ट और कॉन्फ़िगरेबल वर्क फैक्टर के साथ हैश करता है, और वही एन्कोडर का matches() मेथड लॉगिन पासवर्ड की तुलना स्टोर्ड हैश से करने के लिए उपयोग होता है।

BCrypt को MD5 या SHA जैसे तेज़ हैश की तुलना में प्राथमिकता दी जाती है क्योंकि यह जानबूझकर धीमा है, जिससे ब्रूट-फोर्स हमले अव्यावहारिक हो जाते हैं भले ही पासवर्ड डेटाबेस लीक हो जाए।

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder(12); // strength factor
}

String hashed = passwordEncoder.encode(rawPassword);
boolean matches = passwordEncoder.matches(rawPassword, hashed);

Was this answer clear?