diff --git a/src/main/java/PasswordGenerator.java b/src/main/java/PasswordGenerator.java index c9c6784..178ef78 100644 --- a/src/main/java/PasswordGenerator.java +++ b/src/main/java/PasswordGenerator.java @@ -6,6 +6,7 @@ public class PasswordGenerator { final String uppercaseCharacters = "ABCDEFGHJKMNPQRSTUVWXYZ"; final String digits = "0123456789"; final String specialCharacters = ".!?=@#$()%^&/*_-+"; + final SecureRandom rand = new SecureRandom(); private int length = 12; private boolean useUppercase = true; @@ -17,7 +18,6 @@ public class PasswordGenerator { public String generateRandomPassword() { StringBuilder generatedPassword = new StringBuilder(); - SecureRandom rand = new SecureRandom(); String characterPool = ""; if (isUseLowercase()) { @@ -55,6 +55,19 @@ public class PasswordGenerator { return generatedPassword.toString(); } + public String shufflePassword(String password) { + StringBuilder shuffledPassword = new StringBuilder(); + StringBuilder passwordCopy = new StringBuilder(password); + + while (passwordCopy.length() != 0) { + int index = rand.nextInt(passwordCopy.length()); + char c = passwordCopy.charAt(index); + shuffledPassword.append(c); + passwordCopy.deleteCharAt(index); + } + return shuffledPassword.toString(); + } + public boolean isUseUppercase() { return useUppercase; } diff --git a/src/test/java/PasswordGeneratorTest.java b/src/test/java/PasswordGeneratorTest.java index 91590db..1e5f427 100644 --- a/src/test/java/PasswordGeneratorTest.java +++ b/src/test/java/PasswordGeneratorTest.java @@ -62,4 +62,11 @@ class PasswordGeneratorTest { PasswordValidator passwordValidator = new PasswordValidator(); assertTrue(passwordValidator.validate(passwordGenerator.generateRandomPassword())); } + + @Test + void testShufflePassword() { + String testInput = "ABcdefgh123"; + assertNotEquals(passwordGenerator.shufflePassword(testInput), testInput); + assertEquals(passwordGenerator.shufflePassword(testInput).length(), testInput.length()); + } }