My password generator is a small, personal project that I started due to curiosity in cryptography. I had just learned about hashing functions and salting hashes. This led me to consider the effect that salting has on the entropy of a password, and I wondered just how much entropy I could squeeze into the generation of a password.
I could not guarantee the security of the passwords generated by this program, but I have utilized some of the creations for my own personal accounts with anecdotal success. The program heavily shuffles the deck at each step and relies on non-linear generation to create a password that feels significantly more secure than a simple random generator could.
One of my first ideas for this project was to create arrays of each character type available to creating passwords. This includes capital and lowercase letters, numerical digits, and symbols.
At each character chosen, several measures are taken to completely change the random seed based on the current time, the number of actions already taken, and the process ID. Each array is then shuffled.
In addition to shuffling each character array, there is a variable chance to not pick a character. There is no set limit nor is it guaranteed that this will occur. The program continues as if it simply hiccupped, once again shuffling the decks before proceeding to create a string of the original specified length.
As an over-the-top randomization measure, the program finally shifts each generated character, once again at random and further randomized at each step.
While I understand that there are several ways to create a password that are more secure and not nearly as complicated, I feel as though this project was important for a few reasons.
First of all, it made me question my own ability to code for the first time since I enrolled at Southern University. I utilized a built-in debug tool to measure character occurrence over millions of characters at a time and noticed several statistical anomalies that needed to be fixed.
Secondly, it instilled a lasting curiosity for cryptography and eventually security in me that likely not only led to my participation in a cybersecurity research grant project, but also helped me to create my capstone topic years down the line.
Finally, this project helped me to become more comfortable with the C++ language, and gave me experience that helped me in my future coding classes.