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.

105 lines
3.3 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. private int length = 12;
  8. private boolean useUppercase = true;
  9. private boolean useLowercase = true;
  10. private boolean useDigits = true;
  11. private boolean useSpecialCharacters = true;
  12. private boolean requireEveryConfiguredCharacterType = true;
  13. public String generateRandomPassword() {
  14. StringBuilder generatedPassword = new StringBuilder();
  15. SecureRandom rand = new SecureRandom();
  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 boolean isUseUppercase() {
  49. return useUppercase;
  50. }
  51. public void setUseUppercase(boolean useUppercase) {
  52. this.useUppercase = useUppercase;
  53. }
  54. public boolean isUseLowercase() {
  55. return useLowercase;
  56. }
  57. public void setUseLowercase(boolean useLowercase) {
  58. this.useLowercase = useLowercase;
  59. }
  60. public boolean isUseDigits() {
  61. return useDigits;
  62. }
  63. public void setUseDigits(boolean useDigits) {
  64. this.useDigits = useDigits;
  65. }
  66. public boolean isUseSpecialCharacters() {
  67. return useSpecialCharacters;
  68. }
  69. public void setUseSpecialCharacters(boolean useSpecialCharacters) {
  70. this.useSpecialCharacters = useSpecialCharacters;
  71. }
  72. public boolean isRequireEveryConfiguredCharacterType() {
  73. return requireEveryConfiguredCharacterType;
  74. }
  75. public void setRequireEveryConfiguredCharacterType(boolean requireEveryConfiguredCharacterType) {
  76. this.requireEveryConfiguredCharacterType = requireEveryConfiguredCharacterType;
  77. }
  78. public int getLength() {
  79. return length;
  80. }
  81. public void setLength(int length) {
  82. this.length = length;
  83. }
  84. }