Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

Badanie złożoności hasła

piątek,

Badanie złożoności hasła

W materiale przedstawiono kilka sposobów zliczania wystąpień liter, cyfr i pozostałych znaków w łańcuchu realizowanych przy pomocy języka JavaScript. Wynik działania prezentowanych przykładów wyświetlany jest w konsoli JavaScript. W takie narzędzie są wyposażone wszystkie współczesne popularne przeglądarki stron internetowych, najczęściej można je wywołać za pomocą klawisza F12 (w Firefoksie skrót Ctrl+Shift+K).

Pierwszy przykład wykorzystuje pętlę oraz możliwość odwołania się do pojedynczego znaku w podobny sposób jak w przypadku elementów tablic. Podczas każdej iteracji badany jest kolejny znak z łańcucha. Litery można porównywać, na przykład znak a jest mniejszy od b, tworząc warunki, można wyznaczyć przedziały znaków odpowiednie dla małych (lower) i wielkich liter (upper) oraz cyfr (num). Znak niespełniający żadnego warunku zaliczany jest do pozostałych znaków (other). Prezentowany kod nie rozpoznaje polskich znaków, problem ten rozwiązano w następnym przykładzie.

var i, s, x, lower, upper, num, other;

s = 'T@jne!hAslo4';
x = s.length;
lower = upper = num = other = 0;

for(i=0; i < x; i++) {
  if(s[i]>='a' && s[i]<='z') lower++;
  else if(s[i]>='A' && s[i]<='Z') upper++;
  else if(s[i]>=0 && s[i]<=9) num++;
  else other++;
}

console.log(lower);
console.log(upper);
console.log(num);
console.log(other);

Problem związany z polskimi znakami można rozwiązać, dokładając do skryptu kolejne warunki (np. if(s[i]=='Ą') itd.), jednak w takim przypadku znacznie zwiększy on swoją objętość. Wygodniejszą metodą będzie posłużenie się wyrażeniami regularnymi. Są one pewnego rodzaju wzorcem, który umożliwia przeszukiwanie łańcucha znaków pod kątem występowania określonych wyrażeń. Klasa znaków określona jako [a-z] oznacza małe litery w rozumieniu systemu kodowania ASCII (bez polskich znaków). Kolejne znaki można łatwo dodać do klasy, dopisując je na końcu, w efekcie powstało wyrażenie [a-ząćęłńóśźż]. Metoda test() przeszukuje przekazany argumentem łańcuch znaków pod kątem wystąpienia szukanego wzorca i zwraca prawdę lub fałsz.

var i, s, x, lower, upper, num, other;
s = 'Żółtą!jaźŃ6';
x = s.length;
lower = upper = num = other = 0;

for(i=0; i < x; i++) {
  if((/[a-ząćęłńóśźż]/).test(s[i])) lower++;
  else if((/[A-ZĄĆĘŁŃÓŚŹŻ]/).test(s[i])) upper++;
  else if((/[0-9]/).test(s[i])) num++;
  else other++;
}

console.log(lower);
console.log(upper);
console.log(num);
console.log(other);

Przy zastosowaniu wyrażeń regularnych pętla jest zbędna. Metoda match() zwraca wyszukane wyrażenia w postaci tablicy, licznik trafień można uzyskać, badając ilość znalezionych elementów (własność length). Modyfikator g zastosowany w wywołaniu metody match() powoduje, że nie kończy ona działania po znalezieniu pierwszego elementu. Jedyna niedogodność to możliwość zwrócenie przez metodę wartości null w przypadku braku wyników. Aby obsłużyć taką sytuację, posłużono się operatorem trójargumentowym dla każdej klasy znaków. Ilość znaków niebędących literą lub cyfrą została ustalona za pomocą prostego działania matematycznego.

var s, lower, upper, num, other;
lower = upper = num = other = 0;
s = 'Żółtą!jaźŃ6';

lower = s.match(/[a-ząćęłńóśźż]/g);
lower = lower ? lower.length : 0;
upper = s.match(/[A-ZĄĆĘŁŃÓŚŹŻ]/g);
upper = upper ? upper.length : 0;
num   = s.match(/[0-9]/g)
num = num ? num.length : 0;
other = s.length - lower - upper - num;

console.log(lower);
console.log(upper);
console.log(num);
console.log(other);

Ostatni przykład dotyczy sytuacji, kiedy wielkość liter nie ma znaczenia. Jedyna większa modyfikacja poprzedniego skryptu to zastosowanie metody toLowerCase(), która konwertuje wszystkie litery na małe znaki.

var s, letters, num, other;
letters = num = other = 0;
s = 'Żółtą!jaźŃ6';

letters = s.toLowerCase().match(/[a-ząćęłńóśźż]/g);
letters = letters ? letters.length : 0;
num   = s.match(/[0-9]/g);
num = num ? num.length : 0;
other = s.length - letters - num;

console.log(letters);
console.log(num);
console.log(other);
Artykuł: Konkurs z Języka Angielskiego Zawodowego

Konkurs z Języka Angielskiego Zawodowego

Artykuł: Testujemy kontroler ARGB

Testujemy kontroler ARGB

Artykuł: Olimpiada Zdrowia PCK

Olimpiada Zdrowia PCK

Artykuł: Zostań dawcą szpiku!

Zostań dawcą szpiku!

Artykuł: Przeglądarka Vivaldi

Przeglądarka Vivaldi

Nasze technikum

Technik informatyk

Szkoły dla dorosłych

Nasza szkoła

Pełna oferta edukacyjna

Oferta szkoły