Passwords 如何以编程方式在密码中创建/检测键盘运行?

Passwords 如何以编程方式在密码中创建/检测键盘运行?,passwords,pattern-matching,graph-theory,graph-traversal,Passwords,Pattern Matching,Graph Theory,Graph Traversal,我正在寻找一种方法来创建密码列表或检测密码中的键盘运行 我可以用密码条件(如长度和所需特殊字符数)来约束我的问题 一个简单的密钥运行示例可以是“6yhn^YHN”或“zse4ZSE$” 更复杂的键槽可能有不同的形状,如“V”或“X”(例如“MKO0MJU7MKKO”)MJU&) 最初的想法是对大量密码转储进行统计分析,并查看仅运行密钥的密码的流行情况,但我认为这可能在密码强度强制工具中有积极的应用。我不知道这与regex有什么关系-你认为可以用正则表达式来实现吗?我不知道怎么做 我认为这是一个绘

我正在寻找一种方法来创建密码列表或检测密码中的键盘运行

我可以用密码条件(如长度和所需特殊字符数)来约束我的问题

一个简单的密钥运行示例可以是“6yhn^YHN”或“zse4ZSE$”

更复杂的键槽可能有不同的形状,如“V”或“X”(例如“MKO0MJU7MKKO”)MJU&)


最初的想法是对大量密码转储进行统计分析,并查看仅运行密钥的密码的流行情况,但我认为这可能在密码强度强制工具中有积极的应用。

我不知道这与regex有什么关系-你认为可以用正则表达式来实现吗?我不知道怎么做

我认为这是一个绘图问题,不是吗?构建一个包含关键点及其相邻点之间所有边的图,然后遍历输入,查看它是否表示对该图的有效遍历。您的“更复杂的运行”本质上只是回溯-如果输入中的下一个关键点不是图形中的边,请返回到开始(或者如果您想涵盖“T”或其他变体,可以逐个回溯),然后看看是否可以继续遍历


对于一个非常模糊的问题,这是一个非常模糊的答案,你会说吗?

你不会用正则表达式这样做

您将需要创建一个图形数据结构来建模键盘,每个键都是一个节点,边被指定一个方向(因此节点G将有一个方向为右的边和目标H)。您还可以将边从关键点移动到其已移动版本(或从已移动到未移动)。然后,您可以通过检查密码是否沿着图形的一致方向运行N个字符来测试密码中的运行


键盘上有大量可能的运行,因此我不确定由运行组成的密码是否比其他可能的密码更不安全…

这实际上可能不会那么难。存储一组表示字符的对象,这些对象上有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;
         }
     }
 }
我开始疯狂地创建一个“方向”界面,所以它比最初复杂一点,但你只有这么多复杂的东西和相对简单的对象,所以如果你保持它轻,那么它可能会保持相当快

我觉得对于这样的事情,动态语言可能是最好的


是的,正如其他答案所指出的,正则表达式不起作用。

你想用什么语言来做这件事?@citizen conn我现在是语言不可知论者。我愿意与提供最佳方法的人合作。请注意,强制使用强密码的最简单方法是随机生成强密码,而不给用户任何自行更改密码的选项。如果你用规则限制空间,实际上你是在削弱密码。你想用什么键盘?(不同的人类语言有不同的布局。真的。)@Donal现在我们将使用标准的QWERTY键盘。我明白了。谢谢,我认为这让我走上了正确的道路。我不确定我对正则表达式的想法,我已经更改了标记以反映这一点。不过,键盘图形中的n路径节点比n个节点组合要少得多。感谢您的回复。我要用这个。看起来Python图形已经超越了我快速完成这项任务所需的功能。我给e.dan打了勾,因为他刚好在你前面打卡。