anchor.diff:  
   .Create Default DelegatingPasswordEncoder
   ====
  -[source,java]
  +.Java
  +[source,java,role="primary"]
   ----
   PasswordEncoder passwordEncoder =
       PasswordEncoderFactories.createDelegatingPasswordEncoder();
   ----
  +
  +.Kotlin
  +[source,kotlin,role="secondary"]
  +----
  +val passwordEncoder: PasswordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder()
  +----
   ====
   
   Alternatively, you may create your own custom instance. For example:
   
   .Create Custom DelegatingPasswordEncoder
   ====
  -[source,java]
  +.Java
  +[source,java,role="primary"]
   ----
   String idForEncode = "bcrypt";
   Map encoders = new HashMap<>();
  
positive.code: Like other adaptive one-way functions, it should be tuned to take about 1 second to verify a password on your system.
  This algorithm is a good choice when FIPS certification is required.
  
  [source,java]
  ----
  // Create an encoder with all the defaults
  Pbkdf2PasswordEncoder encoder = new Pbkdf2PasswordEncoder();
  
negative.code: Like other adaptive one-way functions, it should be tuned to take about 1 second to verify a password on your system.
  The current implementation if the `Argon2PasswordEncoder` requires BouncyCastle.
  
  .Argon2PasswordEncoder
  ====
  .Java
  [source,java,role="primary"]
  ----
  // Create an encoder with all the defaults
  Argon2PasswordEncoder encoder = new Argon2PasswordEncoder();
  String result = encoder.encode("myPassword");
  assertTrue(encoder.matches("myPassword", result));
  ----
  
  .Kotlin
  [source,kotlin,role="secondary"]
  ----
  // Create an encoder with all the defaults
  val encoder = Argon2PasswordEncoder()
  val result: String = encoder.encode("myPassword")
  assertTrue(encoder.matches("myPassword", result))
  ----
  ====
  
  [[authentication-password-storage-pbkdf2]]
  == Pbkdf2PasswordEncoder
  