Introduction
Apparently, this question has been asked here and it unfortunately closed. I thought it was a good idea to try again with it, but done right.
XKCD looks at the how we are trained to use "hard to remember passwords", thinking it's secure, but instead, would take a computer 3 days to crack. On the flip side, remembering 4-5 words brings Kuan's Password Intropy up, and is easy to remember. Crazy how that works, huh?
Challenge
The job today is to create 5 passwords using words. 4 words per password and a minimum of 4 letters per word, but no maximum. Kuan's Password Intropy will need to be calculated for every password, but a forced minimum will not be set.
What is Kuan's Password Intropy?
Kuan's Password Intropy is a measurement of how unpredictable a password is, according to Kuan. There is a simple calculation: E = log2(R) * L. E being Kuan's Password Intropy, R being range of available characters and L for password length.
Range of available characters is self explanatory. It's the range of characters that a password can have, in this case is Upper and lower case. Since there is 26 characters in the alphabet, 26 x 2 = 52 characters in the whole range of the password.
Password Length is also self explanatory. It's the total length of the password after creation.
Constraints
- No input.
- A word cannot reappear in the same password.
- No symbols or numbers allowed in a password.
- 4 words per password, but a forced minimum of 4 letters per word.
- No spaces between words.
- You cannot generate the same password over and over again.
- Each word has to be capitalized in a password.
- Output has to be human-readable, must be spaced out. Must also include Kuan's Password Intropy of the password with it using Kuan's Password Intropy equation above.
- Dictionary. You must use this, download it as a text file and integrate accordingly. This will be the list from which you grab words from. Your code should assume its available.
- This is code-golf, shortest bytes win.
Output
TriedScarProgressPopulation 153.9
TryingPastOnesPutting 119.7
YearnGasesDeerGiven 108.3
DoubtFeetSomebodyCreature 142.5
LiquidSureDreamCatch 114.0
N
symbols from the setS
, the password entropy islog2(|S|)*N
. Here the size of the symbol set is the size of the dictionary (|S|=4284
) and the number of symbols is the number of words (N=4
), so the entropy for each password is48.3
. \$\endgroup\$3t1ta#asd
), then the entropy will be the logarithm of the number of possible passwords. If you always choose 4 words uniformly at random from a 4284-word dictionary, then there are 4284^4 passwords, each with entropy log₂(4284)*4 ≈ 48.26. \$\endgroup\$