Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 密码强度计_Javascript_Passwords - Fatal编程技术网

Javascript 密码强度计

Javascript 密码强度计,javascript,passwords,Javascript,Passwords,我希望能够在我的系统的web界面中对用户密码进行评级,以便在他们点击提交之前知道他们是否有错误的密码 关键要求: 必须能够评估密码,而不仅仅是通过/失败 如果密码低于阈值,则应禁用表单,以便用户无法提交 看起来不错。:) 不使用jQuery-我们目前正在使用Mochikit和Y!本系统的用户界面 我发现很多密码表都是用jQuery编写的,类似的东西太冗长了 有谁能推荐一个我可以使用的javascript密码评分器,或者给出一个如何编写的示例吗?下面是一组脚本: 我想他们都会给密码打分,并且

我希望能够在我的系统的web界面中对用户密码进行评级,以便在他们点击提交之前知道他们是否有错误的密码

关键要求:

  • 必须能够评估密码,而不仅仅是通过/失败
  • 如果密码低于阈值,则应禁用表单,以便用户无法提交
  • 看起来不错。:)
  • 不使用jQuery-我们目前正在使用Mochikit和Y!本系统的用户界面
我发现很多密码表都是用jQuery编写的,类似的东西太冗长了


有谁能推荐一个我可以使用的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-1) { nCount++; } } 返回n计数; }
您可以根据自己的要求定制

更新:在此处创建了一个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 "";
}