public class RandPass
extends java.lang.Object
The alphabet (characters used in the passwords generated) may be specified, and the random number generator can be externally supplied.
Care should be taken when using methods that limit the types of passwords may be generated. Using an alphabet that is too small, using passwords that are too short, requiring too many of a certain type of character, or not allowing repetition, may decrease security.
More information about this class is available from ostermiller.org.
Modifier and Type | Field and Description |
---|---|
protected char[] |
alphabet
Set of characters which may be
used in the generated passwords.
|
protected char[] |
firstAlphabet
Set of characters which may be
used for the first character
in the generated passwords.
|
protected static java.util.ResourceBundle |
labels
Locale specific strings displayed to the user.
|
protected char[] |
lastAlphabet
Set of characters which may be
used for the last character
in the generated passwords.
|
static char[] |
LETTERS_ALPHABET
Alphabet consisting of upper and lower case letters A-Z.
|
static char[] |
LOWERCASE_LETTERS_ALPHABET
Alphabet consisting of the lower case letters A-Z.
|
static char[] |
LOWERCASE_LETTERS_AND_NUMBERS_ALPHABET
Alphabet consisting of the lower case letters A-Z and
the digits 0-9.
|
static char[] |
NONCONFUSING_ALPHABET
Alphabet consisting of upper and lower case letters A-Z and
the digits 0-9 but with characters that are often mistaken
for each other when typed removed.
|
static char[] |
NUMBERS_AND_LETTERS_ALPHABET
Alphabet consisting of upper and lower case letters A-Z and
the digits 0-9.
|
static char[] |
PRINTABLE_ALPHABET
Alphabet consisting of all the printable ASCII characters.
|
protected java.security.SecureRandom |
rand
Random number generator used.
|
protected int |
repetition
One less than the maximum number of repeated characters
that are allowed in a password.
|
static char[] |
SYMBOLS_ALPHABET
Alphabet consisting of all the printable ASCII symbols.
|
static char[] |
UPPERCASE_LETTERS_ALPHABET
Alphabet consisting of the upper letters A-Z.
|
static java.lang.String |
version
Version number of this program
|
Constructor and Description |
---|
RandPass()
Create a new random password generator
with the default secure random number generator
and default NONCONFUSING alphabet for all characters.
|
RandPass(char[] alphabet)
Create a new random password generator
with the default secure random number generator
and given alphabet for all characters.
|
RandPass(java.security.SecureRandom rand)
Create a new random password generator
with the given secure random number generator
and default NONCONFUSING alphabet for all characters.
|
RandPass(java.security.SecureRandom rand,
char[] alphabet)
Create a new random password generator
with the given secure random number generator
and given alphabet for all characters.
|
Modifier and Type | Method and Description |
---|---|
void |
addRequirement(char[] alphabet,
int num)
Require that a certain number of characters from an
alphabet be present in generated passwords.
|
void |
addVerifier(PasswordVerifier verifier)
Add a class that will verify passwords.
|
java.lang.String |
getPass()
Generate a random password of the default length (8).
|
java.lang.String |
getPass(int length)
Generate a random password of the given length.
|
char[] |
getPassChars()
Generate a random password of the default length (8).
|
char[] |
getPassChars(char[] pass)
Fill the given buffer with random characters.
|
char[] |
getPassChars(int length)
Generate a random password of the given length.
|
static void |
main(java.lang.String[] args)
Generate a random passwords.
|
void |
setAlphabet(char[] alphabet)
Set the alphabet used by this random password generator.
|
void |
setFirstAlphabet(char[] alphabet)
Set the alphabet used by this random password generator for the first character
of passwords.
|
void |
setLastAlphabet(char[] alphabet)
Set the alphabet used by this random password generator for the last character
of passwords.
|
void |
setMaxRepetition(int rep)
Set the maximum number of characters that may appear in sequence more than
once in a password.
|
void |
setRandomGenerator(java.security.SecureRandom rand)
Set the random number generator used by this random password generator.
|
public static final java.lang.String version
protected static java.util.ResourceBundle labels
public static final char[] NUMBERS_AND_LETTERS_ALPHABET
public static final char[] SYMBOLS_ALPHABET
public static final char[] PRINTABLE_ALPHABET
public static final char[] LOWERCASE_LETTERS_ALPHABET
public static final char[] LOWERCASE_LETTERS_AND_NUMBERS_ALPHABET
public static final char[] LETTERS_ALPHABET
public static final char[] UPPERCASE_LETTERS_ALPHABET
public static final char[] NONCONFUSING_ALPHABET
protected java.security.SecureRandom rand
protected int repetition
protected char[] alphabet
This value may not be null or have no elements.
protected char[] firstAlphabet
This value may be null but it must have at least one element otherwise.
protected char[] lastAlphabet
This value may be null but it must have at least one element otherwise.
public RandPass()
public RandPass(java.security.SecureRandom rand)
rand
- Secure random number generator to use when generating passwords.public RandPass(char[] alphabet)
alphabet
- Characters allowed in generated passwords.public RandPass(java.security.SecureRandom rand, char[] alphabet)
rand
- Secure random number generator to use when generating passwords.alphabet
- Characters allowed in generated passwords.public static void main(java.lang.String[] args) throws java.lang.Exception
args
- Command line arguments.java.lang.Exception
- errorspublic void addRequirement(char[] alphabet, int num)
alphabet
- set of letters that must be presentnum
- number of letters from the alphabet that must be present.public void setAlphabet(char[] alphabet)
alphabet
- Characters allowed in generated passwords.java.lang.NullPointerException
- if the alphabet is null.java.lang.ArrayIndexOutOfBoundsException
- if the alphabet has no elements.public void setRandomGenerator(java.security.SecureRandom rand)
rand
- Secure random number generator to use when generating passwords.public void setFirstAlphabet(char[] alphabet)
If the alphabet for the first character is set to null or has no elements, the main alphabet will be used for the first character.
alphabet
- Characters allowed for the first character of the passwords.public void setLastAlphabet(char[] alphabet)
If the alphabet for the last character is set to null or has no elements, the main alphabet will be used for the last character.
alphabet
- Characters allowed for the last character of the passwords.public void setMaxRepetition(int rep)
For example setRepetition(3) will allow a password ababab but not allow abcabc.
Using this method can greatly reduce the pool of passwords that are generated. For example if only one repetition is allowed then the pool of passwords is the permutation of the alphabet rather than the combination.
rep
- Maximum character repetition.public char[] getPassChars(char[] pass)
Using this method, the password character array can easily be reused for efficiency, or overwritten with new random characters for security.
NOTE: If it is possible for a hacker to examine memory to find passwords, the password should be overwritten in memory as soon as possible after i is no longer in use.
pass
- buffer that will hold the password.public void addVerifier(PasswordVerifier verifier)
verifier
- class that performs verification of password.public char[] getPassChars(int length)
NOTE: If it is possible for a hacker to examine memory to find passwords, the password should be overwritten in memory as soon as possible after i is no longer in use.
length
- The desired length of the generated password.public char[] getPassChars()
NOTE: If it is possible for a hacker to examine memory to find passwords, the password should be overwritten in memory as soon as possible after i is no longer in use.
public java.lang.String getPass(int length)
NOTE: Strings can not be modified. If it is possible for a hacker to examine memory to find passwords, getPassChars() should be used so that the password can be zeroed out of memory when no longer in use.
length
- The desired length of the generated password.getPassChars(int)
public java.lang.String getPass()
NOTE: Strings can not be modified. If it is possible for a hacker to examine memory to find passwords, getPassChars() should be used so that the password can be zeroed out of memory when no longer in use.
getPassChars()
Copyright (c) 2001-2020 by Stephen Ostermiller