`
kong0itey
  • 浏览: 304688 次
社区版块
存档分类
最新评论

我写的密码强度验证方法(原创)

阅读更多
/*
 *说明:
 *  该方法主要分析密码的内容构成,密码长度等情况,然后评分划分密码强度等级
 *参数:
 *  pwd 密码,字符串类型
 *  obj 密码强度显示的地方,必须是jquery封装对象 
 *  minLen 密码最小长度
 *  maxLen 密码最大长度
 */
function showPassstrength(pwd, obj, minLen, maxLen) {
	var dictionary = [];

	var containsAToZ = function(str) {
		var aToZ = [ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
				"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
				"x", "y", "z" ];
		var r = false;
		for ( var i = 0; i < aToZ.length; i++) {
			if (str.indexOf(aToZ[i]) >= 0) {
				r = true;
				break;
			}
		}
		return r;
	}

	var containsNumber = function(str) {
		var numbers = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ];
		var r = false;
		for ( var i = 0; i < numbers.length; i++) {
			if (str.indexOf(numbers[i]) >= 0) {
				r = true;
				break;
			}
		}
		return r;
	}

	var contains_ = function(str) {
		return str.indexOf("_") >= 0 ? true : false;
	}

	var isANumberSequence = function(str) {
		var array = str.split("");
		var eq = true;
		var num = parseInt(array[1]);
		var diff = num - parseInt(array[0])
		for ( var i = 2; i < array.length; i++) {
			if (parseInt(array[i]) != num + diff) {
				eq = false;
				break;
			}
			num = array[i];
		}
		return eq;
	}

	var reverse = function(str) {
		return str.split("").reverse().join("");
	}

	pwd = pwd.toLowerCase();
	var level = 1;
	/** ****************加分因子***************** */
	if (containsAToZ(pwd)) {
		level++;
	}
	if (containsNumber(pwd)) {
		level++;
	}
	if (contains_(pwd)) {
		level++;
	}
	if ((containsAToZ(pwd) && containsNumber(pwd))
			|| (containsAToZ(pwd) && contains_(pwd))
			|| (containsNumber(pwd) && contains_(pwd))) {
		level++;
	}
	if (containsAToZ(pwd) && containsNumber(pwd) && contains_(pwd)) {
		level++;
	}
	/** ****************减分因子***************** */
	if (pwd.length < (minLen + maxLen) / 2 && pwd.length >= minLen) {
		level--;
	}
	var pwdArray = pwd.split("");
	// 全部由同一个字符组成的直接判为弱
	var allEquals = true;
	var element = pwdArray[0];
	for ( var i = 1; i < pwdArray.length; i++) {
		if (pwdArray[i] != element) {
			allEquals = false;
			break;
		}
		element = pwdArray[i];
	}
	if (allEquals)
		level = 0;
	// 纯数字的密码不能是一个等差数列数列
	if (/^[0-9]+$/.test(pwd)
			&& (isANumberSequence(pwd) || isANumberSequence(reverse(pwd)))) {
		level--;
	}
	// 不能由连续的字母组成,例如:abcdefg
	if ("abcdefghijklmnopqrstuvwxyz".indexOf(pwd) > 0) {
		level--;
	}
	// 纯字母组成的密码不能是键盘上的相邻键位字母组合,例如:qwertyu
	if ("qwertyuiop".indexOf(pwd) > 0 || "asdfghjkl".indexOf(pwd) > 0
			|| "zxcvbnm".indexOf(pwd) > 0) {
		level--;
	}
	// 不能是2段短字符的重复,例如:567567
	if (pwd.length % 2 == 0) {
		var part1 = pwd.substring(0, pwd.length / 2);
		var part2 = pwd.substring(pwd.length / 2);
		if (part1 == part2)
			level--;
	}
	// 不能是3段短字符的重复,例如:121212
	if (pwd.length % 3 == 0) {
		var part1 = pwd.substring(0, pwd.length / 3);
		var part2 = pwd.substring(pwd.length / 3, pwd.length / 3 * 2);
		var part3 = pwd.substring(pwd.length / 3 * 2);
		if (part1 == part2 && part2 == part3)
			level--;
	}
	// 不能是一个日期,例如:19870723
	if (/^[0-9]+$/.test(pwd)) {
		if (pwd.length == 8) {
			var year = parseInt(pwd.substring(0, 4));
			var month = parseInt(pwd.substring(4, 6));
			var day = parseInt(pwd.substring(5, 7));
			if (year >= 1000 && year < 2100 && month >= 1 && month <= 12
					&& day >= 1 && day <= 31) {
				level--;
			}
		}
	}
	// 不能位于内置字典内
	for ( var i = 0; i < dictionary.length; i++) {
		if (pwd == dictionary[i] || dictionary[i].indexOf(pwd) >= 0) {
			level--;
			break;
		}
	}

	if (level < 0)
		level = 0;
	if (level > 5)
		level = 5;
	var levelNames = [ "很弱", "较弱", "一般", "较好", "良好", "优秀" ];
	obj.html(levelNames[level]);
}
分享到:
评论
3 楼 流年末年 2017-02-06  
那四个参数还是没看懂.....能不能解释下
showPassstrength("admin909909%^", $("#span_testPwd"), 6, 10);
2 楼 kingcs2008 2016-05-16  
// 验证pws.js
showPassstrength("admin909909%^", $("#span_testPwd"), 6, 10);
1 楼 h957355152 2015-09-23  
请问博主这个怎么用呢?我直接放到jsp里面调用showPassstrength()不成功。有没有案例供参考?

相关推荐

    原创高效、高强度动态加密算法

    在实际应用中,原创高效、高强度动态加密算法可以广泛应用于数据存储、网络通信、密码管理等领域,为敏感信息提供强大的保护。然而,评估任何加密算法的安全性都需要考虑其完整性和可审查性,以及是否经过了专业社区...

    易语言-易语言原创网络验证系统

    《易语言原创网络验证系统》是一款专为易语言开发者设计的网络验证系统,旨在提供一套完整的用户注册、找回密码和充值账号等功能。该系统的核心在于实现软件与服务器之间的安全通信,确保用户数据的安全性和软件使用...

    图书管理的登陆和图书搜索 新用户注册

    密码强度检查也是必要的,通常要求包含大小写字母、数字和特殊字符的组合。此外,为防止垃圾账号的创建,可以设置验证码或使用第三方服务进行人机验证。 在实现这些功能时,还需要关注系统的扩展性和可维护性。例如...

    Intersetd:登陆密码手机号登录,等页面部分是自己写的,有一部分是看到不错的开源页面

    3. **密码安全**:密码登录通常需要考虑安全性,如使用哈希和盐值加密存储密码,以及对用户输入的密码强度进行检查。 4. **开源技术**:项目使用了开源页面的部分,这可能涉及到诸如Bootstrap、Material-UI等开源UI...

    易语言CL源码,易语言Se源码,易语言客户注册

    源码中这部分内容可能包含用于验证密码强度的函数,通过检查字符串中字母和数字的出现情况来确定其是否满足设定的规则。 3. **判断字母**:除了字母数字的组合,还可能有单独对字母的验证,例如判断用户名是否只...

    android手机锐捷认证客户端

    5. **网络状态监控**:实时显示网络连接状态,包括信号强度、连接速度等信息。 6. **智能节能**:在无网络活动时,客户端会自动进入休眠模式,减少电池消耗。 三、安装与使用步骤 1. **下载安装**:从提供的压缩包...

    网页设计登陆注册连接数据库报告书

    例如,在登录注册表单中,可以用JavaScript进行表单验证,如检查用户输入的邮箱格式或密码强度,提高用户体验。 4. VBScript 和 JavaScript 都可以在客户端运行,但VBScript主要在IE浏览器中使用。它们可以用于增强...

    模仿手机QQ登陆

    同时,输入时应有实时的字符验证,例如密码强度检查。 4. **按钮交互**:登录按钮应该有明显的视觉反馈,比如按下时的颜色变化,以及点击后的加载动画,以告知用户操作正在进行。 5. **错误处理**:当用户输入的...

    辽宁省专业技术在线学习2019网络安全知识读本在线考试题及答案78分.docx

    - 安全强度较低,在目前的计算能力下,容易被破解。 - 已较少使用,现代安全体系更倾向于使用AES(Advanced Encryption Standard)等更安全的加密算法。 ### 2. 文件删除与回收站 - **删除命令**: 在Windows操作...

    金盾视频加密器 2011

    3. **用户验证**:为了确保只有合法用户能够访问加密的视频,软件通常会要求用户输入密码或通过其他身份验证方式,如硬件绑定、网络验证等,增加安全性。 4. **反盗录保护**:除了防止非法播放,金盾视频加密器还...

    Encr image_ImageEncryption_matlab_encryption_guessji1_algorithm_

    guessji1算法可能是一种原创或改进的加密技术,其具体细节可能涉及到混淆、扩散、非线性变换等加密原理,旨在提高图像数据的安全性。 描述中的"Ecryption image code"提示我们这里包含的是图像加密的源代码,这意味...

    黑色大气cnode社区论坛登录页面程序源码.zip

    3. JavaScript交互:表单验证(如空值检查、密码强度检测)、AJAX请求(向后端发送登录请求,处理异步反馈)、事件监听(如点击事件、键盘事件)等,增强用户交互体验。 4. 安全性:防止XSS和CSRF攻击,对用户输入...

    1500个前端开发常用JavaScript特效.rar

    4. **表单验证**:前端验证用户输入是提高用户体验的重要一环,JavaScript可以实时检查输入的有效性,如邮箱格式、密码强度等,避免无效提交。 5. **拖放功能**:通过JavaScript,用户可以方便地拖动页面上的元素,...

    purify社交网站源代码

    JavaScript用于实时检查用户输入的有效性,例如检查邮箱格式、密码强度等,防止无效或恶意的数据提交。同时,它还可以实现动态效果,如表单的实时预览和反馈,提升用户交互性。 从【标签】"purify 社交网站 php源...

    典型的图像数字水印算法研究.pdf

    数字水印技术是一种将特定信息(水印)嵌入到数字化媒体(如图像、音频、视频等)中的方法,以实现隐藏传输、存储、标注、身份识别、版权保护等功能。它不仅能帮助原创作者证明其作品的所有权,作为法律诉讼中防止...

    基于签名加密算法的手机支付系统的研究与实现 (2007年)

    它的核心思想在于能在一个逻辑步骤中同时完成加密和签名操作,既保证了数据的机密性,也验证了数据的完整性和来源的不可抵赖性。在手机支付系统中,这种算法能够同时确保交易数据的安全传输和交易双方的身份认证。 ...

    MEAT.encrypter:不(并且希望永远不会)使用任何预先存在的加密哈希算法的对称加密程序

    MEAT.encrypter是一款原创的对称加密软件,其设计目的是不依赖任何已有的加密或哈希算法,以提供更高的安全性与隐私保护。这种创新的方法旨在避免已知的安全漏洞和潜在的攻击手段,确保数据在传输和存储过程中的绝对...

Global site tag (gtag.js) - Google Analytics