除了我在Wikipedia上阅读的内容以外,我对 L33t 语言还不那么感兴趣。
我确实需要在我们的密码强度验证工具中添加字典检查,并且由于leet-speak仅会给密码破解过程带来微不足道的开销,因此我想在对字典进行输入检查之前删除输入的内容。
为了阐明其背后的原因:当要求在其密码中添加符号时,许多用户将只需要对一个常用单词进行一些非常可预见的leet替换,即可满足数字和符号包含的要求。因为它是如此可预测的,所以与仅使用原始词典词相比,这几乎没有增加密码的实际复杂性。\编辑
不知道所有规则,尤其是多字符替换,例如用“//”代替“W”,并且确定这是一个已经解决了很多问题的问题,包括开源项目。
我正在寻找代码示例,但到目前为止还没有找到任何示例。如果是 C#代码,这将是一个加分!但是使用任何通用语言的代码都将有所帮助。
另外,最好有一种可扩展的方法,因为我知道这种方言发展很快。能够在一年内随着规则的发展而增加一些规则将是很好的。
不,这不是我整个密码强度检查的基础。这只是我在本文中寻求帮助的部分。因此,我们不会被密码和安全性问题的其他因素所分散,让我来描述一下与le语无关的密码问题:
我们测量每个NIST special publication 800-63密码中的熵位数,并要求通过策略可配置的等效措施(例如56位)使密码有效。这仍然为字典单词留下了空间,从熵的角度来看,它们并不是一个更好的普通字典单词。
我只想告诉用户“P @ s5w0rd”太接近字典单词,他们可能会找到一个更强的密码。
我知道安全方面还有很多事情需要考虑,例如人们可以记住的密码与安全密码之间的平衡。这不是那个问题。
我要问的是将33t转换为纯文本,这应该与代码高尔夫一样有趣和有趣。有人看过任何代码示例吗?
最佳答案
还提供一些代码:
String password = @"\/\/4573Fu|_";
Dictionary<string, string> leetRules = new Dictionary<string, string>();
leetRules.Add("4", "A");
leetRules.Add(@"/\", "A");
leetRules.Add("@", "A");
leetRules.Add("^", "A");
leetRules.Add("13", "B");
leetRules.Add("/3", "B");
leetRules.Add("|3", "B");
leetRules.Add("8", "B");
leetRules.Add("><", "X");
leetRules.Add("<", "C");
leetRules.Add("(", "C");
leetRules.Add("|)", "D");
leetRules.Add("|>", "D");
leetRules.Add("3", "E");
leetRules.Add("6", "G");
leetRules.Add("/-/", "H");
leetRules.Add("[-]", "H");
leetRules.Add("]-[", "H");
leetRules.Add("!", "I");
leetRules.Add("|_", "L");
leetRules.Add("_/", "J");
leetRules.Add("_|", "J");
leetRules.Add("1", "L");
leetRules.Add("0", "O");
leetRules.Add("5", "S");
leetRules.Add("7", "T");
leetRules.Add(@"\/\/", "W");
leetRules.Add(@"\/", "V");
leetRules.Add("2", "Z");
foreach (KeyValuePair<string,string> x in leetRules)
{
password = password.Replace(x.Key, x.Value);
}
MessageBox.Show(password.ToUpper());