phpalgorithmstringkeyboardqwerty

Mnemonic Password Generation Algorithm for QWERTY Keyboards


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.

QWERTY Keyboard Layout

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?


Solution

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