6

パスワードのキーボード実行のリストを作成または検出する方法を探しています。

必要な特殊文字の長さや数などのパスワード基準で問題を制限できます。

単純なキー実行の例は、「6yhn^YHN」または「zse4ZSE$」です。

より複雑なキー ランは、'V' や 'X' などのさまざまな形にすることができます (例: "mko0mju7MKO)MJU&")。

これの最初のアイデアは、大規模なパスワード ダンプの統計分析を行い、キー ラン オンリー パスワードの普及を確認することでしたが、パスワード強度強制ツールに積極的に応用できると思います。

4

3 に答える 3

4

正規表現でこれを行うつもりはありません。

キーボードをモデル化するグラフ データ構造を作成する必要があります。各キーはノードであり、エッジには方向が割り当てられます (したがって、ノード G には方向が右で目的地が H のエッジがあります)。また、キーからシフトされたバージョン (またはシフトされたものからシフトされていないもの) へのエッジを持つこともできます。次に、N 文字の一貫した方向にグラフに従っていることを確認することで、パスワードの実行をテストできます。

キーボードには非常に多くの可能性のある実行があるため、実行で構成されたパスワードが他の可能なパスワードよりも安全性が低いかどうかはわかりません...

于 2011-07-12T22:35:57.927 に答える
3

これが正規表現とどのように関連しているのかわかりません - 正規表現でこれを行うことができると思いますか? 方法がわかりません。

グラフの問題だと思いますよね?キーとその近傍の間のすべてのエッジでグラフを作成し、入力を走査して、それがグラフの有効な走査を表しているかどうかを確認します。「より複雑な実行」は基本的にバックトラックです-入力の次のキーがグラフのエッジでない場合は、最初に戻ります(または、「T」またはその他のバリエーションをカバーしたい場合は、1つずつバックトラックします) ?) トラバースを続けられるかどうかを確認してください...

かなりあいまいな質問に対するかなりあいまいな答えだと思いませんか?

于 2011-07-12T22:35:18.920 に答える
0

これは実際にはそれほど難しいことではないでしょう。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;
         }
     }
 }

「Direction」インターフェイスの作成に夢中になり始めたので、最初よりも少し複雑になりましたが、非常に多くの複雑さと比較的単純なオブジェクトしかないため、軽量に保つと、おそらくかなり高速のままになります.

このようなものには動的言語が最適かもしれないと思います...

はい、他の回答が指摘しているように、正規表現は機能しません。

于 2011-07-12T22:44:15.833 に答える