是否有字符串中字符差异的正式定义,如果是这样,它是如何计算的?

时间:2010-10-02 17:14:49

标签: string algorithm passwords character

概述

我希望分析两个字符之间的差异,作为密码强度检查过程的一部分。

我将解释我想要实现的目标以及为什么并且想知道我正在寻找的是否正式定义以及是否有任何推荐的算法来实现这一目标。

我正在做什么

在整个字符串中,我希望将当前字符与前一个字符进行比较,并确定它们的不同之处。

由于这与密码强度检查有关,因此字符串中一个字符与其前一个字符之间的差异可能被定义为可知字符N来自知道字符N-1的可预测性。可能有一个正式定义,其中我我不知道。

实施例

密码abc123的安全性可能低于azu590。两者都包含三个字母后跟三个数字,但在前者的情况下,序列更具可预测性。

我假设密码猜测器可能尝试一些明显的序列,以便在abc123之前尝试azu590

考虑这些字符串中字符的十进制ASCII值,并且假设ba不同,cb再次相同,我们可以得出一个简单的差异计算。

忽略两个连续字符不在同一个字符类中的情况,我们可以说abc123的字符差异为4,而azu590的差异为25 + 5 + 4 + 9 = 43。

这是否存在?

可以定义字符串中字符与字符差异的概念,类似于两个字符串之间的Levenshtein距离。我不知道这个概念是否被定义或者它可能被称为什么。它是否被定义,如果是,它被称为什么?

我计算字符串中字符到字符差异的示例方法是一种简单明了的方法。它可能有缺陷,可能无效。是否有任何已知的算法可以有效地计算这个角色与角色的差异?

2 个答案:

答案 0 :(得分:3)

听起来你想要一个Markov Chain密码模型。马尔可夫链具有多个状态并且具有在状态之间转换的概率。在您的情况下,状态是允许字符集中的字符,并且转换的概率与这两个字母连续出现的频率成比例。您可以通过查看现有文本中转换的频率来构建马尔可夫链,例如,免费提供的单词列表或密码数据库。

也可以使用这种技术的变体( m阶马尔可夫链),例如你可以考虑前两个字符,而不只是一个。

创建模型后,您可以使用从模型生成密码的概率作为其强度的度量。这是每个州过渡概率的乘积。

答案 1 :(得分:1)

对于一般信号/时间序列数据,这称为Autocorrelation. 您可以尝试调整Durbin–Watson statistic并测试字符之间的正自相关。一种天真的方式可能是使用每个角色的unicode代码点,但我确信这样做不够好。