Pertanyaan kekuatan pemeriksa kata sandi jQuery


Saya cukup baru di jQuery, dan saya telah menulis sebuah fungsi sederhana untuk memeriksa kekuatan kata sandi untuk setiap penekanan tombol.

Idenya adalah bahwa setiap kali pengguna memasukkan karakter, konten dievaluasi untuk menguji kekuatan kata sandi yang telah mereka masukkan ... Saya yakin semua orang telah melihat ini sebelumnya.

Bagaimanapun, logika yang saya gunakan adalah bahwa tidak ada kata sandi yang dimulai dengan nilai 1. Ketika karakter huruf kecil digunakan, skor akan bertambah menjadi 2. Ketika digit digunakan kenaikan skor oleh 1 lagi, sama untuk ketika huruf besar karakter digunakan dan ketika kata sandi menjadi 5 atau lebih panjang karakter.

Apa yang dikembalikan adalah kekuatan kata sandi sejauh nilai dari 1 hingga 5 setiap kali tombol ditekan.

Jadi, pertanyaan saya. Cara yang saya lakukan itu tidak tampak seperti jQuery seperti ... hampir seperti saya mungkin juga baru saja melakukan javascript lurus. Saya juga bertanya-tanya tentang logika saya. Sudahkah saya melakukan sesuatu atau mengabaikan sesuatu? Ada saran dari orang yang lebih pintar dari saya sendiri?

Setiap saran atau saran akan dihargai.

$(document).ready(function(){

        $("#pass_strength").keyup(function() {

            var strength = 1;

            /*length 5 characters or more*/
            if(this.value.length >= 5) {
                strength++;
            }

            /*contains lowercase characters*/
            if(this.value.match(/[a-z]+/)) {
                strength++;
            }

            /*contains digits*/
            if(this.value.match(/[0-9]+/)) {
                strength++;
            }

            /*contains uppercase characters*/
            if(this.value.match(/[A-Z]+/)) {
                strength++;
            }

            alert(strength);
        });
     });

32
2017-09-07 10:17


asal


Jawaban:


Cara terbaik adalah dengan menggunakan plugin yang ada seperti yang disarankan TJB.

Mengenai pertanyaan Anda tentang kode itu sendiri, cara yang lebih baik adalah menulisnya seperti itu:

var pass = "f00Bar!";

var strength = 1;
var arr = [/.{5,}/, /[a-z]+/, /[0-9]+/, /[A-Z]+/];
jQuery.map(arr, function(regexp) {
  if(pass.match(regexp))
     strength++;
});

(Dimodifikasi untuk memperbaiki kesalahan sintaks.)


23
2017-09-07 10:47



Saya menyarankan untuk mengevaluasi plugin kekuatan kata sandi jQuery yang ada. (kecuali Anda melakukannya sebagai latihan)

Berikut beberapa tautan yang saya temukan:

http://www.visual-blast.com/javascript/password-strength-checker/

http://phiras.wordpress.com/2007/04/08/password-strength-meter-a-jquery-plugin/

http://benjaminsterling.com/?p=117


7
2017-09-07 10:32



Di atas jawaban gs, Anda harus memeriksa kata sandi terhadap kata-kata kamus umum (menggunakan hash, mungkin). Kalau tidak, kata sandi yang lemah seperti 'Yellow1' akan dinilai kuat oleh logika Anda.


2
2017-09-07 10:39



Jika Anda melakukan sebagai excersie

Referensi: Indikator Kekuatan Kata Sandi 

Kode jQuery Digunakan (# menunjukkan apa yang telah diubah dari kode Benjamin)

$.fn.passwordStrength = function( options ){
return this.each(function(){
    var that = this;that.opts = {};
    that.opts = $.extend({}, $.fn.passwordStrength.defaults, options);

    that.div = $(that.opts.targetDiv);
    that.defaultClass = that.div.attr('class');

    that.percents = (that.opts.classes.length) ? 100 / that.opts.classes.length : 100;

    v = $(this)
    .keyup(function(){
        if( typeof el == "undefined" )
        this.el = $(this);
        var s = getPasswordStrength (this.value);
        var p = this.percents;
        var t = Math.floor( s / p );

        if( 100 <= s )
        t = this.opts.classes.length - 1;

        this.div
        .removeAttr('class')
        .addClass( this.defaultClass )
        .addClass( this.opts.classes[ t ] );
    })
    # Removed generate password button creation
});

function getPasswordStrength(H){
    var D=(H.length);

    # Added below to make all passwords less than 4 characters show as weak
    if (D<4) { D=0 }


    if(D>5){
        D=5
    }
    var F=H.replace(/[0-9]/g,"");
    var G=(H.length-F.length);
    if(G>3){G=3}
    var A=H.replace(/\W/g,"");
    var C=(H.length-A.length);
    if(C>3){C=3}
    var B=H.replace(/[A-Z]/g,"");
    var I=(H.length-B.length);
    if(I>3){I=3}
    var E=((D*10)-20)+(G*10)+(C*15)+(I*10);
    if(E<0){E=0}
    if(E>100){E=100}
    return E
}


# Removed generate password function
};

$(document)
.ready(function(){
$('input[name="password2"]').passwordStrength({targetDiv: '#iSM',classes : Array('weak','medium','strong')});

});

2
2017-09-07 13:41



  • Panjang kata sandi harus setidaknya 8 karakter.
  • Kekuatan meningkat dengan panjang, kata sandi yang lebih panjang harus memiliki lebih banyak poin.
  • Sertakan karakter khusus seperti # / "dan sejenisnya. (Atau hanya selain [a-Z0-9])
  • Untuk kata sandi yang sangat panjang, metode ini bisa lambat. Mengapa Anda tidak menguji saja semua karakter baru dan menggunakan kamus yang fitur-fiturnya sudah dimiliki oleh kata sandi.

1
2017-09-07 10:26



Anda dapat mencoba plugin jQuery untuk pemeriksaan kekuatan kata sandi

Beberapa dari mereka adalah

Pengukur Kekuatan Kata Sandi

Indikator Kekuatan Kata Sandi 


1
2017-09-07 13:38



Jika Anda tidak ingin menggunakan jQuery Anda dapat menggunakan sesuatu seperti ini:

function strengthResult(p) {
if(p.length<6 || p.length>18) {
return 'Passwords must be 6-18 characters';
}
var strength = checkStrength(p);
switch(true) {
    case strength<=30:
        return 'Password "'+p+'" ('+strength+') is Very Weak';
        break;
    case strength>30 && strength<=35:
        return 'Password "'+p+'" ('+strength+') is Weak';
        break;
    case strength>35 && strength<=50:
        return 'Password "'+p+'" ('+strength+') is below Average';
        break;        
    case strength>50 && strength<=60:
        return 'Password "'+p+'" ('+strength+') is almost Good';
        break;
    case strength>60 && strength<=70:
        return 'Password "'+p+'" ('+strength+') is Good';
        break;
    case strength>70 && strength<=80:
        return 'Password "'+p+'" ('+strength+') is Very Good';
        break;
    case strength>80 && strength<=90:
        return 'Password "'+p+'" ('+strength+') is Strong';
        break;
    case strength>90 && strength<=100:
        return 'Password "'+p+'" ('+strength+') is Very Strong';
        break;
        default:
				return 'Error';
}
}
function strengthMap(w,arr) {
var c = 0;
var sum = 0;
newArray = arr.map(function(i) {
i = c;
//sum += w-2*i;
sum += w;
c++;
return sum;
});
return newArray[c-1];
}
function checkStrength(p){
var weight;
var extra;
switch(true) {
    case p.length<6:
        return false;
        break;
    case p.length>18:
        return false;
        break;
    case p.length>=6 && p.length<=10:
    		weight = 7;
        extra = 4;
        break;
    case p.length>10 && p.length<=14:
    		weight = 6;
        extra = 3;
        break;
    case p.length>14 && p.length<=18:
    		weight = 5;
        extra = 2.5;
        break;
}
allDigits = p.replace( /\D+/g, '');
allLower = p.replace( /[^a-z]/g, '' );
allUpper = p.replace( /[^A-Z]/g, '' );
allSpecial = p.replace( /[^\W]/g, '' );
if(allDigits && typeof allDigits!=='undefined') {
dgtArray = Array.from(new Set(allDigits.split('')));
dgtStrength = strengthMap(weight,dgtArray);
} else {
dgtStrength = 0;
}
if(allLower && typeof allLower!=='undefined') {
lowArray = Array.from(new Set(allLower.split('')));
lowStrength = strengthMap(weight,lowArray);
} else {
lowStrength = 0;
}
if(allUpper && typeof allUpper!=='undefined') {
upArray = Array.from(new Set(allUpper.split('')));
upStrength = strengthMap(weight,upArray);
} else {
upStrength = 0;
}
if(allSpecial && typeof allSpecial!=='undefined') {
splArray = Array.from(new Set(allSpecial.split('')));
splStrength = strengthMap(weight,splArray);
} else {
splStrength = 0;
}
strength = dgtStrength+lowStrength+upStrength+splStrength;
if(dgtArray.length>0){
strength = strength + extra;
}
if(splStrength.length>0){
strength = strength + extra;
}
if(p.length>=6){
strength = strength + extra;
}
if(lowArray.length>0 && upArray.length>0){
strength = strength + extra;
}
return strength;
}
console.log(strengthResult('5@aKw1'));
console.log(strengthResult('5@aKw13'));
console.log(strengthResult('5@aKw13e'));
console.log(strengthResult('5@aKw13eE'));
console.log(strengthResult('5@aKw13eE!'));
console.log(strengthResult('5@aKw13eE!,'));
console.log(strengthResult('5@aKw13eE!,4'));
console.log(strengthResult('5@aKw13eE!,4D'));
console.log(strengthResult('5@aKw13eE!,4Dq'));
console.log(strengthResult('5@aKw13eE!,4DqJ'));
console.log(strengthResult('5@aKw13eE!,4DqJi'));
console.log(strengthResult('5@aKw13eE!,4DqJi#'));
console.log(strengthResult('5@aKw13eE!,4DqJi#7'));
console.log(strengthResult('5@aKw13eE!,4DqJJ#7'));
console.log(strengthResult('5@aKw33eE!,4DqJJ#7'));

console.log(strengthResult('111111'));
console.log(strengthResult('1111111'));
console.log(strengthResult('11111111'));
console.log(strengthResult('111111111'));
console.log(strengthResult('1111111111'));
console.log(strengthResult('11111111111'));
console.log(strengthResult('111111111111'));
console.log(strengthResult('1111111111111'));
console.log(strengthResult('11111111111111'));
console.log(strengthResult('111111111111111'));
console.log(strengthResult('1111111111111111'));
console.log(strengthResult('11111111111111111'));
console.log(strengthResult('111111111111111111'));

console.log(strengthResult('5@aKw33eE!,4DqJJ#71'));
console.log(strengthResult('11111'));

potongan di atas akan menghitung kekuatan kata sandi untuk kata sandi sepanjang 6 hingga 18 karakter. Nilai default untuk setiap karakter unik adalah

  • 7 poin jika kata sandi 6-10 karakter
  • 6 poin jika kata sandi 10-14 karakter
  • 5 poin jika kata sandi 14-18 karakter

Jika karakter diulang dalam kata sandi maka kehilangan 2 poin untuk setiap pengulangan.

Poin tambahan diberikan ketika spesifikasi berikut terpenuhi:

  • kata sandi memiliki setidaknya 6 digit (tambahkan 2,5 atau 3 atau 4 poin)
  • kata sandi memiliki setidaknya 1 angka (tambahkan 2,5 atau 3 atau 4 poin)
  • kata sandi memiliki setidaknya 1 karakter khusus (tambahkan 2,5 atau 3 atau 4 poin)
  • kata sandi memiliki setidaknya 1 huruf besar dan 1 karakter huruf kecil (tambahkan 2,5 atau 3 atau 4 poin)

1
2017-09-18 10:24



Di bawah ini adalah kekuatan / kebijakan kata sandi gratis JQuery plug-in validator. Ini juga mendukung validasi kata sandi yang dimasukkan dalam berbagai bahasa (didukung dalam Unicode). Ini multibahasa.

Kebijakan Kata Sandi / Kekuatan JQuery plug-in Validator


0
2018-01-03 09:55



Lab Kode RnZ mudah digunakan kekuatan kata sandi plugin.


0
2017-12-05 06:20