Start here. This is the direct spoken answer to practice first.
Overview
Passwords are verified through a deliberately expensive one-way function, never decrypted from storage.
I store passwords with a modern adaptive password hash through Spring Security's PasswordEncoder, not plaintext, reversible encryption, or a fast general-purpose hash. Algorithms such as bcrypt, PBKDF2, scrypt, or Argon2 use a salt and configurable work factor. Spring's DelegatingPasswordEncoder stores an algorithm identifier with the encoded value so existing hashes can still be verified while new passwords use the current policy.