2011-07-12 15 views
6

Szukam metody tworzenia listy lub wykrywania uruchomień klawiatury w haśle.Jak programowo tworzyć/wykrywać uruchamianie klawiatury w hasłach?

Mogę związać swój problem z kryteriami hasła, takimi jak długość i liczba wymaganych znaków specjalnych.

Przykładowy prosty kluczowy przebieg może być "6 yhn^YHN" lub "zse4ZSE $".

Bardziej skomplikowane kluczowe przebiegi mogą być w różnych kształtach, jak „V” lub „X” (na przykład „mko0mju7MKO) MJU &”)

Początkowy pomysł ten był dla prowadzenia analiz statystycznych na dużych wysypisk hasło i widząc rozpowszechnienie klucza uruchamiają tylko hasła, ale myślę, że może mieć pozytywne aplikacje w narzędziach do egzekwowania siły haseł.

+0

W jakim języku próbujesz to zrobić? –

+0

@ citizen-conn Jestem agnostykiem językowym w tym momencie. Jestem gotów pracować z tym, który zapewnia najlepszy sposób na zrobienie tego. – Evan

+0

Należy pamiętać, że najprostszym sposobem egzekwowania silnego hasła jest generowanie ich losowo i nie daje użytkownikowi możliwości samodzielnej zmiany. Jeśli ograniczysz ilość miejsca według reguł, w rzeczywistości robisz słabsze hasła. – Joey

Odpowiedz

3

Nie widzę, jak to jest związane z wyrażeniem regularnym - czy myślisz, że możesz to zrobić za pomocą wyrażeń regularnych? Nie widzę jak.

Myślę, że to problem graficzny, prawda? Zbuduj wykres z wszystkimi krawędziami między kluczami i ich sąsiadami, a następnie przejdź przez dane wejściowe i sprawdź, czy reprezentuje prawidłowe przejście przez wykres. Twoje "bardziej skomplikowane przebiegi" są po prostu powrotem do tyłu - jeśli następny klucz na wejściu nie jest krawędzią na wykresie, wróć do początku (lub może cofnij się jeden po drugim, jeśli chcesz pokryć "T" lub inne odmiany ?) i sprawdzić, czy możesz kontynuować przechodzenie ...

To dość ogólnikowa odpowiedź na dość ogólnikowe pytanie, czy nie powiedziałbyś?

+0

Dzięki, myślę, że to stawia mnie na dobrej drodze. Nie jestem pewien, co myślałem z regex, zmieniłem znaczniki, aby to odzwierciedlić. – Evan

4

Nie zamierzasz tego robić z regex.

Będziesz potrzebować stworzyć graficzną strukturę danych modelującą klawiaturę, przy czym każdy klucz jest węzłem, a krawędzie mają przypisany kierunek (więc węzeł G miałby krawędź z kierunkiem w prawo i punktem docelowym H). Możesz również mieć krawędź przechodzącą od klucza do przesuniętej wersji (lub od przesuniętej do niezmienionej). Następnie możesz przetestować przebieg w haśle, sprawdzając, czy podąża za wykresem w spójnym kierunku dla N znaków.

Istnieje bardzo duża liczba możliwych tras na klawiaturze, więc nie jestem pewien, że hasło, które składa się z tras jest mniej bezpieczne niż innych możliwych haseł ...

+0

heh, dobra odpowiedź :) przegłosowano –

+0

Na wykresie klawiatury jest znacznie mniej n-ścieżek niż n-kombinacji węzłów. –

+0

Dzięki za odpowiedź. Idę z tym. Wygląda na to, że Python-Graphs wykracza poza funkcje potrzebne do szybkiego osiągnięcia tego. Dałem e.dan znacznik wyboru, odkąd wyprzedził ciebie. – Evan

0

To rzeczywiście prawdopodobnie nie być tak trudne. Przechowywania kolekcji obiektów, które reprezentują znaki, o właściwościach na nich jak TL, Br, T, BL (lewy górny, dolny prawy, górny, dolny Lewicy) tak na przykład:

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; 
     } 
    } 
} 

I zaczęła się szalona tworząc Interfejs "Kierunek", więc jest trochę bardziej skomplikowany niż na początku, ale ty masz tylko tyle komplikacji i stosunkowo prostych obiektów, więc gdybyś utrzymywał je w dobrym stanie, prawdopodobnie pozostałoby to dość szybko.

Czuję dynamicznego języka może być najlepszym na coś takiego ...

I tak, jak inne odpowiedzi pamiętać, regex nie działa.