diff --git a/web/src/main/java/org/springframework/security/web/authentication/password/HaveIBeenPwnedRestApiPasswordChecker.java b/web/src/main/java/org/springframework/security/web/authentication/password/HaveIBeenPwnedRestApiPasswordChecker.java index b5e9f89cedc..248d7609471 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/password/HaveIBeenPwnedRestApiPasswordChecker.java +++ b/web/src/main/java/org/springframework/security/web/authentication/password/HaveIBeenPwnedRestApiPasswordChecker.java @@ -21,6 +21,7 @@ import java.security.NoSuchAlgorithmException; import java.util.Collections; import java.util.List; +import java.util.Locale; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -63,7 +64,7 @@ public HaveIBeenPwnedRestApiPasswordChecker() { @NonNull public CompromisedPasswordDecision check(String password) { byte[] hash = this.sha1Digest.digest(password.getBytes(StandardCharsets.UTF_8)); - String encoded = new String(Hex.encode(hash)).toUpperCase(); + String encoded = new String(Hex.encode(hash)).toUpperCase(Locale.ROOT); String prefix = encoded.substring(0, PREFIX_LENGTH); String suffix = encoded.substring(PREFIX_LENGTH); diff --git a/web/src/main/java/org/springframework/security/web/authentication/password/HaveIBeenPwnedRestApiReactivePasswordChecker.java b/web/src/main/java/org/springframework/security/web/authentication/password/HaveIBeenPwnedRestApiReactivePasswordChecker.java index f431d2070d3..fd0141d5354 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/password/HaveIBeenPwnedRestApiReactivePasswordChecker.java +++ b/web/src/main/java/org/springframework/security/web/authentication/password/HaveIBeenPwnedRestApiReactivePasswordChecker.java @@ -19,6 +19,7 @@ import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.Locale; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -67,8 +68,8 @@ public Mono check(String password) { } private Mono findLeakedPassword(String encodedPassword) { - String prefix = encodedPassword.substring(0, PREFIX_LENGTH).toUpperCase(); - String suffix = encodedPassword.substring(PREFIX_LENGTH).toUpperCase(); + String prefix = encodedPassword.substring(0, PREFIX_LENGTH).toUpperCase(Locale.ROOT); + String suffix = encodedPassword.substring(PREFIX_LENGTH).toUpperCase(Locale.ROOT); return getLeakedPasswordsForPrefix(prefix).any((leakedPw) -> leakedPw.startsWith(suffix)); }