Javascript 密码强度计
我希望能够在我的系统的web界面中对用户密码进行评级,以便在他们点击提交之前知道他们是否有错误的密码 关键要求:Javascript 密码强度计,javascript,passwords,Javascript,Passwords,我希望能够在我的系统的web界面中对用户密码进行评级,以便在他们点击提交之前知道他们是否有错误的密码 关键要求: 必须能够评估密码,而不仅仅是通过/失败 如果密码低于阈值,则应禁用表单,以便用户无法提交 看起来不错。:) 不使用jQuery-我们目前正在使用Mochikit和Y!本系统的用户界面 我发现很多密码表都是用jQuery编写的,类似的东西太冗长了 有谁能推荐一个我可以使用的javascript密码评分器,或者给出一个如何编写的示例吗?下面是一组脚本: 我想他们都会给密码打分,并且
- 必须能够评估密码,而不仅仅是通过/失败
- 如果密码低于阈值,则应禁用表单,以便用户无法提交
- 看起来不错。:)李>
- 不使用jQuery-我们目前正在使用Mochikit和Y!本系统的用户界面
有谁能推荐一个我可以使用的javascript密码评分器,或者给出一个如何编写的示例吗?下面是一组脚本: 我想他们都会给密码打分,并且不使用jQuery。。。但我不知道他们是否有禁用表单的本地支持
Password Strength Algorithm:
Password Length:
5 Points: Less than 4 characters
10 Points: 5 to 7 characters
25 Points: 8 or more
Letters:
0 Points: No letters
10 Points: Letters are all lower case
20 Points: Letters are upper case and lower case
Numbers:
0 Points: No numbers
10 Points: 1 number
20 Points: 3 or more numbers
Characters:
0 Points: No characters
10 Points: 1 character
25 Points: More than 1 character
Bonus:
2 Points: Letters and numbers
3 Points: Letters, numbers, and characters
5 Points: Mixed case letters, numbers, and characters
Password Text Range:
>= 90: Very Secure
>= 80: Secure
>= 70: Very Strong
>= 60: Strong
>= 50: Average
>= 25: Weak
>= 0: Very Weak
背景
如果要更改密码中的签入内容,请切换为true或false
var m_strUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var m_strLowerCase = "abcdefghijklmnopqrstuvwxyz";
var m_strNumber = "0123456789";
var m_strCharacters = "!@#$%^&*?_~"
Check password
function checkPassword(strPassword)
{
// Reset combination count
var nScore = 0;
// Password length
// -- Less than 4 characters
if (strPassword.length < 5)
{
nScore += 5;
}
// -- 5 to 7 characters
else if (strPassword.length > 4 && strPassword.length < 8)
{
nScore += 10;
}
// -- 8 or more
else if (strPassword.length > 7)
{
nScore += 25;
}
// Letters
var nUpperCount = countContain(strPassword, m_strUpperCase);
var nLowerCount = countContain(strPassword, m_strLowerCase);
var nLowerUpperCount = nUpperCount + nLowerCount;
// -- Letters are all lower case
if (nUpperCount == 0 && nLowerCount != 0)
{
nScore += 10;
}
// -- Letters are upper case and lower case
else if (nUpperCount != 0 && nLowerCount != 0)
{
nScore += 20;
}
// Numbers
var nNumberCount = countContain(strPassword, m_strNumber);
// -- 1 number
if (nNumberCount == 1)
{
nScore += 10;
}
// -- 3 or more numbers
if (nNumberCount >= 3)
{
nScore += 20;
}
// Characters
var nCharacterCount = countContain(strPassword, m_strCharacters);
// -- 1 character
if (nCharacterCount == 1)
{
nScore += 10;
}
// -- More than 1 character
if (nCharacterCount > 1)
{
nScore += 25;
}
// Bonus
// -- Letters and numbers
if (nNumberCount != 0 && nLowerUpperCount != 0)
{
nScore += 2;
}
// -- Letters, numbers, and characters
if (nNumberCount != 0 && nLowerUpperCount != 0 && nCharacterCount != 0)
{
nScore += 3;
}
// -- Mixed case letters, numbers, and characters
if (nNumberCount != 0 && nUpperCount != 0 && nLowerCount != 0 && nCharacterCount != 0)
{
nScore += 5;
}
return nScore;
}
// Runs password through check and then updates GUI
function runPassword(strPassword, strFieldID)
{
// Check password
var nScore = checkPassword(strPassword);
// Get controls
var ctlBar = document.getElementById(strFieldID + "_bar");
var ctlText = document.getElementById(strFieldID + "_text");
if (!ctlBar || !ctlText)
return;
// Set new width
ctlBar.style.width = (nScore*1.25>100)?100:nScore*1.25 + "%";
// Color and text
// -- Very Secure
/*if (nScore >= 90)
{
var strText = "Very Secure";
var strColor = "#0ca908";
}
// -- Secure
else if (nScore >= 80)
{
var strText = "Secure";
vstrColor = "#7ff67c";
}
// -- Very Strong
else
*/
if (nScore >= 80)
{
var strText = "Very Strong";
var strColor = "#008000";
}
// -- Strong
else if (nScore >= 60)
{
var strText = "Strong";
var strColor = "#006000";
}
// -- Average
else if (nScore >= 40)
{
var strText = "Average";
var strColor = "#e3cb00";
}
// -- Weak
else if (nScore >= 20)
{
var strText = "Weak";
var strColor = "#Fe3d1a";
}
// -- Very Weak
else
{
var strText = "Very Weak";
var strColor = "#e71a1a";
}
if(strPassword.length == 0)
{
ctlBar.style.backgroundColor = "";
ctlText.innerHTML = "";
}
else
{
ctlBar.style.backgroundColor = strColor;
ctlText.innerHTML = strText;
}
}
// Checks a string for a list of characters
function countContain(strPassword, strCheck)
{
// Declare variables
var nCount = 0;
for (i = 0; i < strPassword.length; i++)
{
if (strCheck.indexOf(strPassword.charAt(i)) > -1)
{
nCount++;
}
}
return nCount;
}
var m_strUpperCase=“abcdefghijklmnopqrstuvxyz”;
var m_strLowerCase=“abcdefghijklmnopqrstuvxyz”;
var m_strNumber=“0123456789”;
var m_strCharacters=“!@$%^&*?”
检查密码
函数检查密码(strPassword)
{
//重置组合计数
var-nScore=0;
//密码长度
//--少于4个字符
if(strPassword.length<5)
{
nScore+=5;
}
//--5到7个字符
else if(strPassword.length>4&&strPassword.length<8)
{
nScore+=10;
}
//--8个或更多
else if(strPassword.length>7)
{
nScore+=25;
}
//信件
var numpercount=countContain(strPassword,m_strUpperCase);
var nLowerCount=countContain(strPassword,m_strLowerCase);
var nLowerUpperCount=nUpperCount+nLowerCount;
//--字母都是小写
如果(nUpperCount==0&&nLowerCount!=0)
{
nScore+=10;
}
//--字母是大写和小写
否则如果(nUpperCount!=0&&nLowerCount!=0)
{
nScore+=20;
}
//数字
var nNumberCount=countContain(strPassword,m_strNumber);
//--1个
如果(nNumberCount==1)
{
nScore+=10;
}
//--3个或更多数字
如果(nNumberCount>=3)
{
nScore+=20;
}
//人物
var nCharacterCount=countContain(strPassword,m_strCharacters);
//--1个字符
如果(nCharacterCount==1)
{
nScore+=10;
}
//--超过1个字符
如果(nCharacterCount>1)
{
nScore+=25;
}
//奖金
//--字母和数字
如果(nNumberCount!=0&&nLowerUpperCount!=0)
{
nScore+=2;
}
//--字母、数字和字符
如果(nNumberCount!=0&&nLowerUpperCount!=0&&nCharacterCount!=0)
{
nScore+=3;
}
//--混合大小写字母、数字和字符
如果(nNumberCount!=0&&nUpperCount!=0&&nLowerCount!=0&&nCharacterCount!=0)
{
nScore+=5;
}
返回nScore;
}
//通过检查运行密码,然后更新GUI
函数runPassword(strPassword、strFieldID)
{
//检查密码
var nScore=checkPassword(strPassword);
//控制
var ctlBar=document.getElementById(strFieldID+“_-bar”);
var ctlText=document.getElementById(strFieldID+“_text”);
如果(!ctlBar | |!ctlText)
返回;
//设置新宽度
ctlBar.style.width=(nScore*1.25>100)?100:nScore*1.25+“%”;
//颜色和文字
//”“非常安全
/*如果(nScore>=90)
{
var strText=“非常安全”;
var strColor=“#0ca908”;
}
//--安全
否则,如果(nScore>=80)
{
var strText=“安全”;
vstrColor=“#7ff67c”;
}
//”“非常强壮
其他的
*/
如果(nScore>=80)
{
var strText=“非常强”;
var strColor=“#008000”;
}
//--强壮
如果(nScore>=60),则为else
{
var strText=“Strong”;
var strColor=“#006000”;
}
//--一般
如果(nScore>=40),则为else
{
var strText=“平均值”;
var strColor=“#e3cb00”;
}
//--弱
如果(nScore>=20),则为else
{
var strText=“弱”;
var strColor=“#Fe3d1a”;
}
//”“非常虚弱
其他的
{
var strText=“非常弱”;
var strColor=“#e71a1a”;
}
if(strPassword.length==0)
{
ctlBar.style.backgroundColor=“”;
ctlText.innerHTML=“”;
}
其他的
{
ctlBar.style.backgroundColor=strColor;
ctlText.innerHTML=strText;
}
}
//检查字符串中的字符列表
函数countContain(strPassword、strCheck)
{
//声明变量
var-nCount=0;
对于(i=0;i您可以根据自己的要求定制 更新:在此处创建了一个js小提琴,以观看它的直播: 我浏览了大量谷歌搜索,没有发现任何令人满意的东西。我喜欢passpack的做法,因此基本上对其方法进行了反向工程,现在我们开始:
function scorePassword(pass) {
var score = 0;
if (!pass)
return score;
// award every unique letter until 5 repetitions
var letters = new Object();
for (var i=0; i<pass.length; i++) {
letters[pass[i]] = (letters[pass[i]] || 0) + 1;
score += 5.0 / letters[pass[i]];
}
// bonus points for mixing it up
var variations = {
digits: /\d/.test(pass),
lower: /[a-z]/.test(pass),
upper: /[A-Z]/.test(pass),
nonWords: /\W/.test(pass),
}
var variationCount = 0;
for (var check in variations) {
variationCount += (variations[check] == true) ? 1 : 0;
}
score += (variationCount - 1) * 10;
return parseInt(score);
}
您可能想对此进行一点调整,但我发现它对我很有用记住,即使您在javascript中禁用了表单,也应该在服务器端运行此检查。不管怎样,狡猾的用户只会进行表单提交,或者如果用户禁用了javascript怎么办?您还应该注意,用户只是在欺骗自己。不确定你是否需要保护用户免受这些攻击…我认为你链接的页面被黑客攻击了。。。英雄联盟提供的ironylink不起作用。@garrow:除了与您的不同之外,编码样式还有什么问题?(FTR,这也不是我喜欢的风格,但那又怎样?)2号怎么了让我们尝试一个测试用例!比尔的密码是“123&$aA”,abo
function checkPassStrength(pass) {
var score = scorePassword(pass);
if (score > 80)
return "strong";
if (score > 60)
return "good";
if (score >= 30)
return "weak";
return "";
}