Как я могу программно создавать / обнаруживать запуски клавиатуры в паролях? - PullRequest
6 голосов
/ 13 июля 2011

Я ищу метод для создания списка или обнаружения запуска клавиатуры с помощью пароля.

Я могу связать свою проблему с критериями пароля, такими как длина и количество требуемых специальных символов.

Примером простого запуска ключа может быть «6yhn ^ YHN» или «zse4ZSE $».

Более сложные операции ввода ключа могут быть разных форм, например «V» или «X» (например, «mko0mju7MKO»).) MJU & ")

Первоначальная идея для этого заключалась в том, чтобы проводить статистический анализ больших дампов паролей и наблюдать преобладание паролей только для ключей, но я думаю, что это может иметь положительные применения в инструментах обеспечения надежности паролей.

Ответы [ 3 ]

4 голосов
/ 13 июля 2011

Вы не собираетесь делать это с регулярным выражением.

Вам потребуется создать структуру данных графа, моделирующую клавиатуру, где каждая клавиша является узлом, а ребрам назначено направление (таким образом, у узла G будет ребро с направлением Right и получателем H). Вы также можете получить ребро, переходящее от ключа к его смещенной версии (или от смещенного к нешифрованному). После этого вы можете проверить наличие пароля, проверив, что он соответствует графику в непротиворечивом направлении для N символов.

Существует очень большое количество возможных запусков на клавиатуре, поэтому я не уверен, что пароль, составленный из запусков, менее безопасен, чем другие возможные пароли ...

3 голосов
/ 13 июля 2011

Я не понимаю, как это связано с регулярными выражениями - как вы думаете, вы можете сделать это с помощью регулярных выражений? Я не вижу как.

Я думаю, что это проблема с графикой, нет? Постройте граф со всеми ребрами между ключами и их соседями, а затем просмотрите ввод и посмотрите, представляет ли он действительный обход графа. Ваши "более сложные прогоны", по сути, просто возвращают назад - если следующая клавиша на входе не является ребром в вашем графике, вернитесь к началу (или, возможно, верните один за другим, если вы хотите охватить "T" или другие варианты ?) и посмотрим, сможешь ли ты продолжать обходить ...

Это довольно расплывчатый ответ на довольно расплывчатый вопрос, не правда ли?

0 голосов
/ 13 июля 2011

Это на самом деле, вероятно, не будет так сложно.Сохраните коллекцию объектов, представляющих символы, со свойствами, такими как TL, BR, T, BL (вверху слева, внизу справа, вверху, внизу слева), например:

a = RunKey.get("A");



public class RunKey{

    public static Key get(Character char){
        switch(char){
            case A,a: return new A();
            break;
            // one for every letter
        }
     }
 }

 private class A extends RunKey implements IRunKey{

     public IRunKey BR(){
         return new Z();
     }

     public IRunKey TR(){
         return new W();
     }

     public IRunKey T(){
         return new Q();
     }

     public Direction getDirection(Character char){
         tempRunKey = Runkey.get(char);
         if (tempRunKey.T.toString == "char"){
             return T;
         }
     }
 }

Я начал сходить с умасоздание интерфейса «Направление», поэтому он немного сложнее, чем на первый взгляд, но у вас есть только так много сложностей и относительно простых объектов, поэтому, если вы будете держать его легким, он, вероятно, останется довольно быстрым.

Я чувствую, чтодинамический язык может быть лучшим для чего-то подобного ...

И да, как отмечают другие ответы, регулярное выражение не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...