You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
3.7 KiB

  1. import java.security.SecureRandom;
  2. public class PasswordGenerator {
  3. final String lowercaseCharacters = "abcdefghjkmnpqrstuvwxyz";
  4. final String uppercaseCharacters = "ABCDEFGHJKMNPQRSTUVWXYZ";
  5. final String digits = "0123456789";
  6. final String specialCharacters = ".!?=@#$()%^&/*_-+";
  7. final SecureRandom rand = new SecureRandom();
  8. private int length = 12;
  9. private boolean useUppercase = true;
  10. private boolean useLowercase = true;
  11. private boolean useDigits = true;
  12. private boolean useSpecialCharacters = true;
  13. private boolean requireEveryConfiguredCharacterType = true;
  14. public String generateRandomPassword() {
  15. StringBuilder generatedPassword = new StringBuilder();
  16. String characterPool = "";
  17. if (isUseLowercase()) {
  18. characterPool += lowercaseCharacters;
  19. }
  20. if (isUseUppercase()) {
  21. characterPool += uppercaseCharacters;
  22. }
  23. if (isUseDigits()) {
  24. characterPool += digits;
  25. }
  26. if (isUseSpecialCharacters()) {
  27. characterPool += specialCharacters;
  28. }
  29. for (int generatorPosition = 0; generatorPosition < getLength(); generatorPosition++) {
  30. String customCharacterPool = characterPool;
  31. if (isRequireEveryConfiguredCharacterType()) {
  32. if (generatorPosition == 0 && isUseLowercase()) {
  33. customCharacterPool = lowercaseCharacters;
  34. } else if (generatorPosition == 1 && isUseUppercase()) {
  35. customCharacterPool = uppercaseCharacters;
  36. } else if (generatorPosition == 2 && isUseDigits()) {
  37. customCharacterPool = digits;
  38. } else if (generatorPosition == 3 && isUseSpecialCharacters()) {
  39. customCharacterPool = specialCharacters;
  40. } else {
  41. customCharacterPool = characterPool;
  42. }
  43. }
  44. generatedPassword.append(customCharacterPool.charAt(rand.nextInt(customCharacterPool.length())));
  45. }
  46. return generatedPassword.toString();
  47. }
  48. public String shufflePassword(String password) {
  49. StringBuilder shuffledPassword = new StringBuilder();
  50. StringBuilder passwordCopy = new StringBuilder(password);
  51. while (passwordCopy.length() != 0) {
  52. int index = rand.nextInt(passwordCopy.length());
  53. char c = passwordCopy.charAt(index);
  54. shuffledPassword.append(c);
  55. passwordCopy.deleteCharAt(index);
  56. }
  57. return shuffledPassword.toString();
  58. }
  59. public boolean isUseUppercase() {
  60. return useUppercase;
  61. }
  62. public void setUseUppercase(boolean useUppercase) {
  63. this.useUppercase = useUppercase;
  64. }
  65. public boolean isUseLowercase() {
  66. return useLowercase;
  67. }
  68. public void setUseLowercase(boolean useLowercase) {
  69. this.useLowercase = useLowercase;
  70. }
  71. public boolean isUseDigits() {
  72. return useDigits;
  73. }
  74. public void setUseDigits(boolean useDigits) {
  75. this.useDigits = useDigits;
  76. }
  77. public boolean isUseSpecialCharacters() {
  78. return useSpecialCharacters;
  79. }
  80. public void setUseSpecialCharacters(boolean useSpecialCharacters) {
  81. this.useSpecialCharacters = useSpecialCharacters;
  82. }
  83. public boolean isRequireEveryConfiguredCharacterType() {
  84. return requireEveryConfiguredCharacterType;
  85. }
  86. public void setRequireEveryConfiguredCharacterType(boolean requireEveryConfiguredCharacterType) {
  87. this.requireEveryConfiguredCharacterType = requireEveryConfiguredCharacterType;
  88. }
  89. public int getLength() {
  90. return length;
  91. }
  92. public void setLength(int length) {
  93. this.length = length;
  94. }
  95. }