(翻译)密码强度测算

问题概述

需要确保用户输入的密码强度足以防止恶意攻击。

示例

(翻译)密码强度测算 - gc_2299 - gc_2299的博客

用途

  • 用于辅助用户设置不易被人猜中或被计算机程序破解的账号密码。
  • 用于增加用户密码的复杂度,提高攻击者篡改系统的难度。
  • 用于指导用户设置强度够高的密码,让用户了解什么是好的密码。

解决方案

根据预设的规则判断密码的强度,然后紧靠着密码输入框显示一个水平标尺,如果密码强度不高,则标尺上只有一小部分被高亮显示,密码强度越高,标尺上就有越多的部分被高亮显示。

也可以用不同颜色的条形块表示密码的强度,例如绿色条形块表示密码强度高,红色条形块表示密码强度低。

1)密码强度该多高?

如何定义高强度密码还存在争议。乍看起来就很复杂的密码具有高安全性,但是密码创建方式过于复杂和死板,创建的密码反而起不到安全效果。密码过于复杂,增加了用户记住密码的难度,有时这就是“”提高密码安全性“失败的起因,因为有些用户为了记住新的太过复杂的密码而将密码记在纸条上并将其粘到显示器上。在某些单位,3个月就要求强制更换密码,这种问题更严重。

2)高强度密码是什么样?

基于上一段所述,在此强调,一个强度足够的密码不需要满足下列所有条件,只需满足其中一些就可以。一个密码,根据下面这些规则,满足一条就可以加1分(0分表示密码强度最弱,5分表示密码强度最强)。

  • 密码长度超过8个字符。
  • 密码中包含大写和小写字符。
  • 密码中至少包含1个数字。
  • 密码中包含特殊符号。
  • 密码长度超过12个字符。
根据上述5条规则,根据密码得到的分数,可以将密码强度分为6个等级(0-5)。

3)字典攻击

虽然上一段介绍的密码检查规则可以在客户端用JavaScript代码实现,但这种检测并不能阻止字典攻击方式破解用户的密码。为了便于记住密码,人们倾向于将真正的单词中的字符用数组或者特殊字符替换,然后将其作为密码。例如“P@ssw0rd”,这其实并不是一个高强度密码。现在的密码破解软件擅长破解这种字符、数字替换方式的密码。为了避免密码被轻易破解,可以调用ajax方法,根据自己定义的字典来检测密码强度是高还是弱。

4)选择合适的密码强度

需要根据保护的内容来决定密码的强度和复杂度。在心中要把握个度,可能99%的需要保护的内容的密码只需要满足第2)段介绍2-3组规则就可以了(剩下的1%才是需要高强度密码保护的)。

5)常见的密码设置建议

    • 使用看似随机选择的字符和数字组合作为密码。
    • 使用不需要看键盘就可以直接手输的密码,这样可以降低周围的人偷窥你密码的可能性。
    • 定时更改密码。
    • 不要使用网络ID及其变换(全大写、反序、内容重复等变换)作为密码。
    • 不要使用自己或别人的名字及其变换作为密码。
    • 不要使用自己或别人的昵称作为密码。
    • 不要使用任意字典中包含的单词、词组、简称等作为密码。
    • 不要使用与自己相关的、可以轻易获取到的信息作为密码,例如车牌、宠物名称、生日、手机号码等。
    • 不要使用纯字符组合或纯数字组合作为密码,要将字符和数字混合使用。
    • 不要使用键盘上的顺序符号作为密码,例如qwerty、asdf等。

说明(Rationale不知道该怎么翻译

通过在密码输入框旁边显示当前密码的强度,可以强制用户考虑选中合适强度的密码。更甚者,采用密码强度检测技术,设置最低的用户密码强度,可以提高网站的安全性。

网站中带有密码强度显示功能,可以在某一层面增加网站的安全性。这种方式不仅使网站的用户感觉更安全,而且当潜在的用户寻找合作公司时也会把这种功能作为一个必要条件。

 

原文地址:http://ui-patterns.com/patterns/PasswordStrengthMeter

 

PS:这种密码强度检测和显示方式在B/S架构的程序中比较常见,C/S架构的程序,尤其是在局域网和单机上使用的程序,用处不是很大。

### LDA 文档主题分布强度计算方法 Latent Dirichlet Allocation (LDA)[^1] 是一种用于发现大规模语料库中隐藏主题的概率模型。通过该模型可以得到每篇文档的主题分布情况,从而进一步衡量文档与特定主题之间的关联程度。 #### 主题分布的定义 在 LDA 中,每个文档都被表示为主题概率分布的形式。具体来说,对于一篇文档 \(d\) 和一组潜在主题 \(\{z_1, z_2, ..., z_k\}\),可以通过训练后的参数矩阵推导出其主题分布向量 \(\theta_d = [\theta_{d1}, \theta_{d2}, ..., \theta_{dk}]\)。其中,\(k\) 表示主题的数量,而 \(\theta_{di}\) 则代表文档 \(d\) 对应于第 \(i\) 个主题的概率[^2]。 #### 计算文档主题强度的方法 为了量化某个文档相对于某一主题的重要性或“强度”,通常采用以下几种方式: 1. **单主题权重法** 单一主题的强度可以直接由对应位置上的值来决定,即如果关注的是第 \(j\) 个主题,则有: \[ S_j(d) = \theta_{dj} \] 这里 \(S_j(d)\) 就是文档 \(d\) 关于主题 \(j\) 的强度得分[^3]。 2. **加权平均距离度量法** 可以考虑利用欧几里得范数或其他相似性测度函数评估整个分布偏离均匀状态的程度作为整体强度指标。例如: \[ I(d) = ||\theta_d||_p = (\sum^{K}_{i=1}{|\theta_{di}|^p})^\frac{1}{p} \] 当取 \(p=2\) 时便成为标准欧式长度;当设定较大数值如无穷大极限情况下则退化至最大分量绝对值形式[^4]。 3. **熵基测量法** 使用香农熵概念也可以反映内部结构复杂性和集中趋势特征: \[ H(\theta_d)=-\sum^K_{i=1}{\theta_{di}\log{\theta_{di}}} \] 较低水平意味着少数几个主导因素占据绝大部分比例关系,因此可视为更强的表现力表现[^5]。 以下是基于 Python 实现的一个简单例子展示如何提取并分析这些数据: ```python import numpy as np from sklearn.decomposition import LatentDirichletAllocation # 假设我们已经得到了词频矩阵 X (大小 n_samples * n_features) X = ... lda_model = LatentDirichletAllocation(n_components=10, random_state=0) doc_topic_dist = lda_model.fit_transform(X) def calculate_single_strength(doc_idx, topic_idx): """Calculate strength of a specific topic within one document.""" return doc_topic_dist[doc_idx][topic_idx] def overall_intensity(document_distribution, p=2): """Compute the intensity using L_p norm on given distribution vector.""" return np.linalg.norm(document_distribution, ord=p) example_doc_index = 789 # Choose any valid index from your dataset range. selected_topic_number = 3 single_str = calculate_single_strength(example_doc_index, selected_topic_number) print(f"Strength for Topic {selected_topic_number}: {single_str}") total_inten = overall_intensity(doc_topic_dist[example_doc_index], p=2) print(f"Overall Intensity with Euclidean Norm: {total_inten}") ``` 上述脚本展示了两种基本操作模式——分别获取指定条目下某类别的影响力以及综合考量全局特性状况下的评判准则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值