I've a "mnemonic" password generation function that goes something like this:
function Mnemonic($mnemonic)
{
$result = null;
$charset = array(str_split('aeiou', 1), str_split('bcdfghjklmnpqrstvwxyz', 1));
for ($i = 1; $i <= $mnemonic; $i++)
{
$result .= $charset[$i % 2][array_rand($charset[$i % 2])];
}
return $result;
}
Basically this generates a string with $mnemonic
length where every odd character is a consonant and every even character is a vowel. While I understand this reduces the password complexity it's usually much more easier to remember. Now I want to improve it by generating strings that are easy to type.
For instance, while a *nix newbie I always prefer RHEL based distributions over Debian ones, the main reason is the ease of typing yum
versus the ease of typing apt[-get]
, just try it for yourself.
How should I implement the logic to generate strings that are easy to type on QWERTY keyboards?
Carpalx has a lot of research on calculating typing effort, which incorporates:
- finger travel distance
- hand, finger and row penalties
- stroke path
The outcome of their research is the Colemak keyboard layout, which claims to be better than Dvorak.
However, it's written backward from what you want - their goal is to find a better keyboard layout based on input, but you're trying to find easy input based on the keyboard layout.
So - even though you might not be able to use it directly, I thought you might find it interesting (and who knows, if your Perl-fu is strong, you might be able to extract and reverse the algorithm, since it's GPL'd).
You could eliminate all characters that are typed with the ring and pinky finger (q,w,x,z,p), then spit the characters that are typed by the left and the right hands and alternate between these letters.
You may wanna take a look at the principles used in the Dvorak keyboard,
Those principles applied in a password-generating algorithm would be:
I know you said it's a QWERTY keyboard but using these principles on a QWERTY keyboard can give you some very good results, like:
ktrd,ogkdo ("typewriter" in dvorak)
kjg;g;akd;k (using only the home row)
pjedoildupsk (just a random password following the principles)
All Dvorak haters, shush it!
I hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With