计算用户密码和随机密码的熵
在计算用户密码的熵(也就是密码的复杂度)时,通常用什么标准方法呢?感觉每个人都有自己的看法。有些人提到xkcd,有些人则提到NIST和香农。
比如说,我想计算Rockyou泄露的前十个密码的熵,我该用什么方法。大多数Rockyou的密码并不是随机生成的。
如果我想计算那些随机生成的密码的熵,比如在网站上重置密码时生成的密码,通常长度在4到6个字符之间,只包含小写字母a-z和大写字母A-Z。
有没有什么Python的实现可以用来处理这些情况的推荐方法呢?
1 个回答
根据你对理论和实践的兴趣程度,你可以简单地连接到一个像xkcd或NITH这样的接口,获取结果。
关于香农熵和密码:这个链接 http://www.alertboot.com/blog/blogs/endpoint_security/archive/2011/11/29/password-strength-entropy-how-those-password-strength-checkers-work.aspx 提供了一个很好的描述,讲述了香农熵是如何在讨论密码强度时被使用的。它在某种程度上是对香农原始定理的改编,原理是关于如何在嘈杂的信道中可靠地传输离散数据。虽然我能理解这种改编,但我觉得在很多方面它还是不够完善,不过这不是重点。
你有没有看到这些StackOverflow的帖子: 检查密码强度的最佳方法是什么? 或 密码强度检查库 或 检查密码强度(如何检查条件) 或 Python密码强度
我不知道有没有一种明确的方法来计算密码的熵。这是一个看起来简单得令人发指的问题,但仔细一看却发现没有一些限制假设就会变得相当复杂。如果你只是想检查一个密码是否包含来自不同字符类别的4种字符中的3种,那是很简单的。从这个角度来看,如果一个密码包含更多来自不同字符类别的字符,它的熵就会更高。但这仍然有很多不足之处,因为我们怎么判断 ab!! 比 aA#3 更强呢?前者有4个字符,但只有两个字符类别,而后者有3个字符类别。如果你想考虑字典词、反向字典词和短语,那就更难了……