gpt4 book ai didi

php - 帮助计算(和有用性)密码熵

转载 作者:IT王子 更新时间:2023-10-28 23:54:37 24 4
gpt4 key购买 nike

这是一个两部分的问题:

第 1 部分

首先,处理在 PHP 中计算密码的熵。我一直无法找到任何经验上合理的代码示例,并且真的希望在找到计算最终数字的“正确”方法方面得到一些帮助。网上很多人都有自己的自制加权算法,但我真的在寻找方程式的科学答案。

我将使用密码熵作为更大安全系统的一部分,并作为一种方法来分析我们的整体数据安全性,该方法基于用户密码泄露时可访问的信息以及暴力破解密码的难易程度.

第 2 部分

这个问题的第二部分是:这个数字到底有多大用处?我的最终目标是为系统中的每个密码生成一个“分数”,我们可以用它来监控我们作为动态实体的整体系统安全性。我可能不得不使用另一种或两种算法来应对字典攻击、l33t 替换密码等——但我确实认为熵将在这种“整体”系统评级中发挥重要作用。不过,我确实欢迎对其他方法提出建议。

我所知道的

我看到有人提到用对数方程来计算所述熵,但我还没有看到一个实际上没有写成数学方程的好例子。我真的可以使用代码示例(即使不是严格的 PHP 代码示例)让我继续前进。

扩展

在发表评论时,我意识到我可以更好地解释这个计算的用处。当我在用户密码极弱的遗留系统上工作时,我必须有一些具体的证据证明该弱点,然后才能强制所有用户将其密码更改为新的(强制的)强密码。通过为系统中的每个用户帐户存储密码强度分数,我可以构建多个不同的指标来显示整个系统的弱点,并为使用更强的密码提供理由。

TIA

最佳答案

字符串的熵在这里有一个正式的定义: http://en.wikipedia.org/wiki/Entropy_(information_theory)

这个值会有多大用处?这取决于。这是一个计算熵的方法(在 Java 中):

public static double entropy() {
double h = 0, p;
for (int i = 0; i < count.size(); i++){
p = count.get(i)/(totalChars*1.0);
h -= p*Math.log(p)/Math.log(2);
}
return h;
}

count 是一个 Map,其中 (key, value) 对应于 (char, countForChar)。这显然意味着您必须在调用此方法之前处理字符串。

编辑 2:这是相同的方法,用 PHP 重写

function entropy($string) {
$h=0;
$size = strlen($string);
foreach (count_chars($string, 1) as $v) {
$p = $v/$size;
$h -= $p*log($p)/log(2);
}
return $h;
}

编辑 3:密码强度比熵更多。熵是关于不确定性的;这不一定转化为更高的安全性。例如:

"akj@!0aj" 的熵为 2.5,而 "password" 的熵为 2.75

关于php - 帮助计算(和有用性)密码熵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3198005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com