Yes this is a password generator BUT I wanted to create a password generator without relying on a master password or the browser's password manager. It's difficult to remember all the different passwords I use, and having one password for every app is insecure. So, I came up with a deterministic approach that generates the same password every time I use the same variables. I also included fields for website/app, user, and version so that I can generate unique passwords for different places, users, and applications. Whenever my workplace requires me to change my password, I can simply use a new version and the result will be different, but I can still keep track of everything. I am not an expert in security, so some of you may question my methods, but this is my approach.
How it works
Collect user input:
Get keyword, date, website, version, password length, character set preferences (uppercase, lowercase, special characters, numbers), and whether to add version to the password.
Create a character set (charset) based on user preferences.
Generate a hash value using the keyword, date, website, and version.
Calculate the sum of the ASCII codes of the date characters.
Convert the keyword, date, and website to ASCII arrays, and create their inverted versions.
Generate the password by iterating through the desired length, and perform a series of calculations using the ASCII arrays, Mersenne primes, pi decimals, and hash value to determine an index in the charset. Append the character at that index to the password:
Calculate the keyword index, date index, website index, pi index, and prime index for each character position in the password using the modulo operation.
Perform a series of arithmetic operations on ASCII codes of the input values:
Multiply the ASCII code of the keyword character at the keyword index by the Mersenne prime at the current index.
Multiply the result by the ASCII code of the inverted keyword character at the keyword index.
Multiply the result by the ASCII code of the inverted date character at the date index.
Multiply the result by the ASCII code of the inverted website character at the website index.
Multiply the result by the Mersenne prime at the prime index.
Add the hash and the product of the version and the ASCII code of the pi decimal at the pi index to the result from step 2.
Calculate the index of the character in the charset by taking the modulo of the result from step 3 with the charset length.
Add the character at the calculated index from the charset to the password.
If the password length is less than the desired length, add more characters using the date sum, hash, and pi decimals.
Include a number, special character, and version if the corresponding conditions are met and the password length is greater than or equal to 8.
Ensure the password has the correct length.
If the conditions are met, insert a number and a special character at specific positions in the password.
If the user wants to add the version, append it to the password.
Display the generated password to the user.
How to use:
Input a keyword or phrase only you know. (Remember to Always write it exactly the same. You can also use your old 'one password for everything' if that's easier to remember.)
Input the website or aplication or email or even a 'Reason' for how you will use the password.
Add a date you'll remember.
Keep track of your password's version.
Use the checkboxes to select how to build the password.
Use the Character Length to select how long you want the password.
Use the Append version tag checkbox to include a 'version number' at the end of the passowrd (This deletes the last characters to keep the selected length) It will allow you to embed the version number so that you can keep track of the passwords's version more accurately.
Click 'Force Include' If your password doesn't have all the required characters, It'll force the system to add them.