除了我在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());

10-04 14:18