模式匹配-我如何以编程方式创建/检测密码中的键盘运行



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

我可以将我的问题与密码标准绑定,例如所需的特殊字符的长度和数量。

一个简单的示例键运行可以是"6yhn^YHN"或"zse4ZSE$"。

更复杂的键运行可以是不同的形状,如"V"或"X"(例如:"mko0mju7MKO) MJU&")

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

你不能用regex这样做。

你需要创建一个图形数据结构来模拟键盘,每个键都是一个节点,边缘被分配一个方向(所以节点G将有一个方向为右的边缘和目的地H)。你也可以有一个边缘从一个键到它的移位版本(或从移位到未移位)。然后,您可以通过检查它是否在N个字符的一致方向上遵循图来测试在密码中运行。

键盘上有很多可能的运行,所以我不确定由运行组成的密码是否比其他可能的密码更不安全…

我不明白这与正则表达式有什么关系-你认为你可以用正则表达式做到这一点吗?我看不出来。

我认为这是一个图形问题,不是吗?构建一个包含键及其相邻键之间所有边的图,然后遍历输入,看看它是否表示对图的有效遍历。你的"更复杂的运行"本质上只是回溯——如果输入中的下一个键不是你的图形中的一条边,回到开始(或者可能一个接一个地回溯,如果你想覆盖"T"或其他变化?),看看你是否可以继续遍历……

这是一个非常模糊的问题的一个非常模糊的答案,你不觉得吗?

这实际上可能没有那么难。存储代表字符的对象集合,并在其上添加属性,如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;
         }
     }
 }

我开始疯狂地创建一个"方向"界面,所以它比一开始要复杂一点,但你只有这么多复杂和相对简单的对象,所以如果你保持它的轻,那么它可能会保持相当快。

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

是的,正如其他答案所指出的,regex不能工作。

最新更新