public class

MessageDigestPasswordEncoder

extends BaseDigestPasswordEncoder
java.lang.Object
   ↳ org.springframework.security.authentication.encoding.BasePasswordEncoder
     ↳ org.springframework.security.authentication.encoding.BaseDigestPasswordEncoder
       ↳ org.springframework.security.authentication.encoding.MessageDigestPasswordEncoder
Known Direct Subclasses

Class Overview

Base for digest password encoders.

This class can be used stand-alone, or one of the subclasses can be used for compatiblity and convenience. When using this class directly you must specify a Message Digest Algorithm to use as a constructor arg.

The encoded password hash is normally returned as Hex (32 char) version of the hash bytes. Setting the encodeHashAsBase64 property to true will cause the encoded pass to be returned as Base64 text, which will consume 24 characters. See setEncodeHashAsBase64(boolean)

This PasswordEncoder can be used directly as in the following example:

 <bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.MessageDigestPasswordEncoder">
     <constructor-arg value="MD5"/>
 </bean>
 

If desired, the iterations property can be set to enable "password stretching" for the digest calculation.

Summary

Public Constructors
MessageDigestPasswordEncoder(String algorithm)
The digest algorithm to use Supports the named Message Digest Algorithms in the Java environment.
MessageDigestPasswordEncoder(String algorithm, boolean encodeHashAsBase64)
Convenience constructor for specifying the algorithm and whether or not to enable base64 encoding
Public Methods
String encodePassword(String rawPass, Object salt)
Encodes the rawPass using a MessageDigest.
String getAlgorithm()
boolean isPasswordValid(String encPass, String rawPass, Object salt)
Takes a previously encoded password and compares it with a rawpassword after mixing in the salt and encoding that value
void setIterations(int iterations)
Sets the number of iterations for which the calculated hash value should be "stretched".
Protected Methods
final MessageDigest getMessageDigest()
Get a MessageDigest instance for the given algorithm.
[Expand]
Inherited Methods
From class org.springframework.security.authentication.encoding.BaseDigestPasswordEncoder
From class org.springframework.security.authentication.encoding.BasePasswordEncoder
From class java.lang.Object
From interface org.springframework.security.authentication.encoding.PasswordEncoder

Public Constructors

public MessageDigestPasswordEncoder (String algorithm)

The digest algorithm to use Supports the named Message Digest Algorithms in the Java environment.

public MessageDigestPasswordEncoder (String algorithm, boolean encodeHashAsBase64)

Convenience constructor for specifying the algorithm and whether or not to enable base64 encoding

Throws
IllegalArgumentException if an unknown

Public Methods

public String encodePassword (String rawPass, Object salt)

Encodes the rawPass using a MessageDigest. If a salt is specified it will be merged with the password before encoding.

Parameters
rawPass The plain text password
salt The salt to sprinkle
Returns
  • Hex string of password digest (or base64 encoded string if encodeHashAsBase64 is enabled.

public String getAlgorithm ()

public boolean isPasswordValid (String encPass, String rawPass, Object salt)

Takes a previously encoded password and compares it with a rawpassword after mixing in the salt and encoding that value

Parameters
encPass previously encoded password
rawPass plain text password
salt salt to mix into password
Returns
  • true or false

public void setIterations (int iterations)

Sets the number of iterations for which the calculated hash value should be "stretched". If this is greater than one, the initial digest is calculated, the digest function will be called repeatedly on the result for the additional number of iterations.

Parameters
iterations the number of iterations which will be executed on the hashed password/salt value. Defaults to 1.

Protected Methods

protected final MessageDigest getMessageDigest ()

Get a MessageDigest instance for the given algorithm. Throws an IllegalArgumentException if algorithm is unknown

Returns
  • MessageDigest instance
Throws
IllegalArgumentException if NoSuchAlgorithmException is thrown