Improve randomness of Password Generator #62
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pull request type
Please check the type of change your PR introduces:
What is the current behavior?
Currently when inserting a new character in the password string all selected character classes (uppercase letters, lowercase letters, digits and special characters) are picked first, then within the picked character class a specific character is picked.
This leads to passwords being skewed towards characters from smaller classes. I.e. the probability of a character from a smaller (containing less characters) character class to appear in the password is higher. This is skewed even more by exclusions.
This can be tested by opening Password Generator, selecting Lowercase characters, Uppercase characters and Digit characters, and typing "234567890" (without quotes) in ExcludedCharacters field, and generating 10 passwords of 100 characters each. It should be very visible that around 1/3 of the characters in the generated passwords is the digit 1.
Issue Number: N/A
What is the new behavior?
When inserting a new character in the password string the character is picked from a string containing all the non-excluded characters from all the selected character classes hence the probability of any character being picked is equal.
Other information
Quality check
Before creating this PR: