我正在寻找一种方法来创建列表或检测密码中的键盘运行。
我可以用密码标准来限制我的问题,例如长度和所需特殊字符的数量。
一个简单的键运行示例可以是“6yhn^YHN”或“zse4ZSE$”。
更复杂的键运行可能有不同的形状,例如“V”或“X”(例如“mko0mju7MKO)MJU&”)
最初的想法是对大型密码转储进行统计分析,并查看仅运行密钥密码的普遍性,但我认为它可以在密码强度强制工具中具有积极的应用。
我正在寻找一种方法来创建列表或检测密码中的键盘运行。
我可以用密码标准来限制我的问题,例如长度和所需特殊字符的数量。
一个简单的键运行示例可以是“6yhn^YHN”或“zse4ZSE$”。
更复杂的键运行可能有不同的形状,例如“V”或“X”(例如“mko0mju7MKO)MJU&”)
最初的想法是对大型密码转储进行统计分析,并查看仅运行密钥密码的普遍性,但我认为它可以在密码强度强制工具中具有积极的应用。
您不会使用正则表达式来执行此操作。
您将需要创建一个对键盘进行建模的图形数据结构,每个键都是一个节点,边被分配一个方向(因此节点 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;
}
}
}
我开始疯狂地创建一个“方向”界面,所以它比一开始复杂一点,但你只有这么多复杂性和相对简单的对象,所以如果你保持轻量级,那么它可能会保持相当快。
我觉得动态语言可能最适合这样的事情......
是的,正如其他答案所指出的那样,正则表达式不起作用。