← Back to Questions
Spring Boot

What is password encoding in Spring Security?

Learn What is password encoding in Spring Security? with simple explanations, real-time examples, interview tips and practical use cases.

What is Password Encoding in Spring Security?

Password encoding in Spring Security is the process of converting plain-text passwords into a secure encoded format before storing them in the database.

Spring Security uses password encoders to protect user credentials and prevent password theft if the database is compromised.

In simple words, password encoding hides the actual password so attackers cannot easily read or misuse it.


Why Password Encoding is Important

Storing passwords in plain text is extremely dangerous.

Example of insecure storage:

username: naresh
password: admin123

If hackers access the database:

  • All user passwords become visible
  • Attackers may log into accounts
  • Users may reuse same passwords elsewhere
  • Major security breaches may occur

Password encoding protects passwords from direct exposure.


What Happens After Password Encoding?

Example:

admin123

becomes:

$2a$10$4K8Jx9kQd3sF9P1Lz2hD0eK9jV8A7...

Encoded passwords are difficult to reverse or crack.


What is PasswordEncoder in Spring Security?

Spring Security provides:

PasswordEncoder

interface for encoding and verifying passwords securely.


PasswordEncoder Main Methods

Method Purpose
encode() Encodes plain-text password
matches() Compares raw and encoded password

PasswordEncoder Example

public interface PasswordEncoder {

    String encode(CharSequence rawPassword);

    boolean matches(
            CharSequence rawPassword,
            String encodedPassword
    );
}

Most Common Password Encoder

Spring Security commonly uses:

BCryptPasswordEncoder

Why BCrypt is Popular

  • Strong hashing algorithm
  • Automatically generates salt
  • Difficult to crack
  • Widely recommended
  • Industry-standard security

BCryptPasswordEncoder Example

@Bean
public PasswordEncoder passwordEncoder() {

    return new BCryptPasswordEncoder();
}

Encoding Password Example

String encodedPassword =
        passwordEncoder.encode("admin123");

System.out.println(encodedPassword);

Sample Output

$2a$10$8KfR9Pz4kD7V3qfY2xQ5EePj3h7...

Important Observation

Every time BCrypt encodes the same password, the output becomes different.

Example:

admin123
→ $2a$10$abc...

admin123
→ $2a$10$xyz...

Why Encoded Passwords Change Every Time

BCrypt automatically adds:

Salt

Salt is random data added before hashing.

This improves security against:

  • Rainbow table attacks
  • Precomputed hash attacks

How Password Matching Works

During login:

  1. User enters password
  2. Spring Security compares raw password with encoded password
  3. PasswordEncoder internally validates match

Password Matching Example

boolean result =
        passwordEncoder.matches(
                "admin123",
                encodedPassword
        );

System.out.println(result);

Output

true

How Password Encoding Works Internally

  1. User registers account
  2. Password is encoded
  3. Encoded password is stored in database
  4. User logs in later
  5. Spring Security compares passwords using matches()

User Registration Example

@Service
public class UserService {

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Autowired
    private UserRepository userRepository;

    public void register(RegisterRequest request) {

        User user = new User();

        user.setUsername(request.getUsername());

        user.setPassword(
                passwordEncoder.encode(
                        request.getPassword()
                )
        );

        userRepository.save(user);
    }
}

User Login Example

During authentication:

passwordEncoder.matches(
        rawPassword,
        encodedPassword
);

Common Password Encoders in Spring Security

Encoder Description
BCryptPasswordEncoder Most secure and recommended
Pbkdf2PasswordEncoder PBKDF2-based encoding
SCryptPasswordEncoder Memory-intensive hashing
NoOpPasswordEncoder No encoding (unsafe)

Why NoOpPasswordEncoder is Unsafe

NoOpPasswordEncoder stores passwords directly without encryption.

Example:

password = admin123

This is highly insecure and should never be used in production.


Password Encoding vs Encryption

Feature Password Encoding Encryption
Reversible No Yes
Main Purpose Password protection Secure data transmission
Example BCrypt AES

Why Passwords Should Not Be Decrypted

Password encoding is designed to be:

One-way hashing

This means:

  • Passwords cannot easily be reversed
  • Only password comparison is possible

Password Encoding in JWT Authentication

JWT authentication still requires encoded passwords.

Login flow:

  1. User enters password
  2. Spring Security validates encoded password
  3. JWT token is generated

Password Encoding in Database

User Entity Example

@Entity
public class User {

    @Id
    private Long id;

    private String username;

    private String password;
}

Database Example

Username Password
naresh $2a$10$3Kf9P...

Advantages of Password Encoding

  • Protects passwords from theft
  • Improves application security
  • Prevents plain-text password storage
  • Supports secure authentication
  • Protects against database leaks

Disadvantages of Improper Password Handling

  • Weak encoding algorithms may be cracked
  • Improper configuration may reduce security
  • Hardcoded passwords create vulnerabilities

Best Practices for Password Encoding

  • Always use BCryptPasswordEncoder
  • Never store plain-text passwords
  • Use strong password policies
  • Store secret keys securely
  • Use HTTPS for login APIs
  • Do not expose password fields in APIs

Common Authentication Flow with Encoded Passwords

  1. User registers
  2. Password is encoded
  3. Encoded password stored in DB
  4. User logs in
  5. Spring Security validates password using matches()
  6. Authentication succeeds

Common Password-Related Security Risks

Risk Solution
Plain-text passwords Use BCrypt
Weak passwords Use strong validation
Password reuse Encourage unique passwords
Database leaks Use secure hashing

Common Interview Questions on Password Encoding

What is password encoding in Spring Security?

Password encoding converts plain-text passwords into secure hashed values before storing them.

Why is BCryptPasswordEncoder recommended?

BCrypt automatically generates salt and provides strong password hashing security.

What is the difference between encode() and matches()?

encode() converts raw password into encoded format, while matches() compares raw and encoded passwords.

Why should passwords never be stored in plain text?

Plain-text passwords are vulnerable to theft and hacking.

What is salt in password encoding?

Salt is random data added before hashing to improve password security.


Conclusion

Password encoding is one of the most critical security features in Spring Security.

It protects user passwords by converting them into secure hashed values before storing them in the database.

Spring Security provides powerful password encoders such as BCrypt, which are widely used in enterprise applications, banking systems, REST APIs, and microservices.

Understanding password encoding is essential for Spring Boot developers because secure password storage is mandatory in modern backend application development.

Why this Spring Boot question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.