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?
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.