首页 > UCHome源码分析 > uchome中用户注册模块,关于密码安全程度的javascript实现分析

uchome中用户注册模块,关于密码安全程度的javascript实现分析

2009年11月20日 浏览 17,759 次 admin

很多的网站,在你输入密码的时候,都有对密码强度的判断,通过你输入的不同的字符,将密码分为:太短、很弱、一般、很强,现在就来看看uchome中,javascript中是怎么实现的
先看看输入四种字符,所显示的四种不同情况:
一:输入”!@”,显示的效果是:
密码太短
二:输入”!@#$”,显示的效果是:
密码很弱
三:输入”!@#$qaz”,显示的效果是:
密码一般
三:输入”!@#$qaz123″,显示的效果是:
密码很强

再来看看他们的实现效果,先看看密码输入框的代码:
密码输入框
看到有一个javascript键盘事件,并执行一个函数checkPwd(this.value);,密码强度就是通过这个函数进行判断的,看看这个函数的代码实现过程

function checkPwd(pwd){

		if (pwd == "") {
			$("chkpswd").className = "psdiv0";//如果密码为空,则设置为初始化的样式 
			$("chkpswdcnt").innerHTML = "";
		} else if (pwd.length < 3) {//如果密码小于3位数,也就是我们前面所说的第一种情况
			$("chkpswd").className = "psdiv1";
			$("chkpswdcnt").innerHTML = "太短";
		} else if(!isPassword(pwd) || !/^[^%&amp;amp;]*$/.test(pwd)) {//密码中包含“^%&amp;amp;”或是ascii码大于255,则不显示密码强度
			$("chkpswd").className = "psdiv0";
			$("chkpswdcnt").innerHTML = "";
		} else {
			var csint = checkStrong(pwd);//判断的样式,共有几种字符组合而成
			switch(csint) {
				case 1://如果为1,则表示只有一种字符组成,比如111或是abc
					$("chkpswdcnt").innerHTML = "很弱";
					$( "chkpswd" ).className = "psdiv"+(csint + 1);
					break;
				case 2://如果为2,则表示有两种字符组成,如果11aa或是!@#qaz
					$("chkpswdcnt").innerHTML = "一般";
					$( "chkpswd" ).className = "psdiv"+(csint + 1);
					break;
				case 3:	//有三个字符组成,12as!@
					$("chkpswdcnt").innerHTML = "很强";
					$("chkpswd").className = "psdiv"+(csint + 1);
					break;
			}
		}
	}
	function isPassword(str){
		if (str.length < 3) return false;
		var len;
		var i;
		len = 0;
		for (i=0;i<str.length;i++){
			if (str.charCodeAt(i)>255) return false;//charCodeAt(i);显示字符的ascii码值
		}
		return true;
	}
	function charMode(iN){
		if (iN>=48 &amp;amp;&amp;amp; iN <=57) //数字
		return 1;
		if (iN>=65 &amp;amp;&amp;amp; iN <=90) //大写字母
		return 2;
		if (iN>=97 &amp;amp;&amp;amp; iN <=122) //小写
		return 4;
		else
		return 8; //特殊字符
	}
	//计算出当前密码当中一共有多少种模式
	//当num=12
	function bitTotal(num){
		modes=0;
		for (i=0;i<4;i++){
			if (num &amp; 1) modes++; //12的二进制是:00001100 &amp; 00000001 = 0,所以不自增,当i=2时还是为0,只有当i=3与4时,modes才自增加
			num>>>=1; //向右移一位,00000110
		}
		//最后modes=2
		return modes;
	} 

	//返回密码的强度级别
	function checkStrong(pwd){
		modes=0;
		for (i=0;i<pwd.length;i++){
			//测试每一个字符的类别并统计一共有多少种模式.
			modes|=charMode(pwd.charCodeAt(i));
			//将每一个字符的类型进行"或"运算,比如密码是:!@qaz,第1、2字符因为都是特殊字符所以都返回8,8的二进制是:00001000,
			//8|8,也就是00001000|00001000仍为00001000,密码的后三位是小写字母,
			//所以返回的是:4,00001000|00000100,得到的值是:00001100,为12,则modes = 12
		}
		return bitTotal(modes);
	}

相关日志

  • UCHOME2.0大概架构
  • UCHome中,关于用户退出过程的代码分析
  • UCenter中admin.php页面的分析
  • UCHome中我要上榜(cp_top.php)操作页面的代码分析
  • UCHome关于查看加密图片的程序处理过程
本文的评论功能被关闭了.