From 9f2e7e9ef37ba7030b96bd6b4ce7aa15471043ce Mon Sep 17 00:00:00 2001 From: arrnavvv <61576354+arrnavvv@users.noreply.github.com> Date: Fri, 18 Sep 2020 13:32:12 +0530 Subject: [PATCH] Update PasswordGen.java Changed code so that it follows password policy. --- Others/PasswordGen.java | 63 ++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/Others/PasswordGen.java b/Others/PasswordGen.java index c41768ad0685..d0a31d7fb358 100644 --- a/Others/PasswordGen.java +++ b/Others/PasswordGen.java @@ -10,38 +10,49 @@ * Creates a random password from ASCII letters * Given password length bounds * - * @author AKS1996 - * @date 2017.10.25 + * @author arrnavvv + * @date 18-09-2020 */ -class PasswordGen { - public static void main(String args[]) { - String password = generatePassword(8, 16); - System.out.print("Password: " + password); - } - - static String generatePassword(int min_length, int max_length) { - Random random = new Random(); - - String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - String lower = "abcdefghijklmnopqrstuvwxyz"; - String numbers = "0123456789"; - String specialChars = "!@#$%^&*(){}?"; +public class PasswordGenerator { - String allChars = upper + lower + numbers + specialChars; + static String generatePassword(int min_length, int max_length){ + String smallAlphabet="abcdefghijklmnopqrstuvwxyz"; + String largeAlphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + String digits="1234567890"; + String specialCharacters="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; - List letters = new ArrayList(); - for (char c : allChars.toCharArray()) - letters.add(c); + String all = smallAlphabet+largeAlphabet+digits+specialCharacters; + Random random = new Random(); + int length = random.nextInt(max_length - min_length) + min_length; + + StringBuilder password = new StringBuilder(); + password.append((smallAlphabet.charAt(random.nextInt(26)))). + append(largeAlphabet.charAt(random.nextInt(26))). + append(digits.charAt(random.nextInt(10))). + append(specialCharacters.charAt(random.nextInt(31))); + + int left = length-4; + StringBuilder remainingPassword = new StringBuilder(); + while(left-->0){ + remainingPassword.append(all.charAt(random.nextInt(93))); + } + password.append(remainingPassword); - // Inbuilt method to randomly shuffle a elements of a list - Collections.shuffle(letters); - StringBuilder password = new StringBuilder(); + ArrayList list = new ArrayList<>(); + for (char c : password.toString().toCharArray()) + list.add(c); + Collections.shuffle(list); - // Note that size of the password is also random - for (int i = random.nextInt(max_length - min_length) + min_length; i > 0; --i) { - password .append( letters.get(random.nextInt(letters.size()))); + StringBuilder finalPassword = new StringBuilder(); + for(int i=0;i