Czego się nauczysz?
- Bezpiecznego generowania losowych wartości (random_int vs rand)
- Pracy z tablicami znakow i ich łączenia
- Walidacji parametrow wejsciowych
- Zapisu historii operacji do pliku JSON
Stworzysz Generator haseł - aplikacje umozliwiajaca generowanie bezpiecznych, losowych haseł na podstawie wybranych parametrow. Użytkownik okresla długość hasła oraz zestawy znakow (małe litery, wielkie litery, cyfry, znaki specjalne), a system generuje losowe hasło i zapisuje je do historii. To praktyczne narzedzie, które można wykorzystać do tworzenia bezpiecznych haseł.
Czego się nauczysz?
W prawdziwej pracy...
Bezpieczeństwo haseł to fundament cyberbezpieczenstwa. Znajomosc zasad tworzenia silnych haseł i kryptograficznie bezpiecznych funkcji losowych (jak random_int w PHP) jest niezbedna przy budowaniu systemow uwierzytelniania, generatorow tokenow, kluczy API czy systemow resetowania haseł.
Formularz parametrow hasła Użytkownik wybiera długość hasła (np. 8-32 znakow) oraz zaznacza checkboxy: małe litery, wielkie litery, cyfry, znaki specjalne.
Generowanie losowego hasła System tworzy hasło z wybranych zestawow znakow, używając bezpiecznej funkcji losowej. Wynik jest wyświetlany w czytelnej formie.
Zapis do historii Każde wygenerowane hasło jest zapisywane do pliku JSON wraz z data i parametrami (bez przechowywania samego hasła w produkcji!).
Przykładowa struktura pliku JSON:
{ "passwords": [ { "id": 1, "length": 16, "has_lowercase": true, "has_uppercase": true, "has_numbers": true, "has_special": false, "strength": "strong", "created_at": "2026-02-13 10:30:00" }, { "id": 2, "length": 8, "has_lowercase": true, "has_uppercase": false, "has_numbers": true, "has_special": false, "strength": "medium", "created_at": "2026-02-13 11:45:00" } ]}Wymagane funkcje:
Przykładowy scenariusz:
Ocena: 3.0Użytkownik wchodzi na strone, ustawia długość hasła na 12 znakow, zaznacza “Małe litery” i “Cyfry”. Po kliknieciu “Generuj” widzi hasło np. “a8k2m5n9p3x1”. Przy probie wygenerowania hasła bez zadnego zaznaczenia widzi błąd.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Użytkownik generuje hasło z wszystkimi opcjami. Pod formularzem widzi historie: “12 znakow, małe+wielkie+cyfry+specjalne, 10:30”. Klika “Kopiuj” i hasło trafia do schowka. W pliku JSON zapisuja się parametry (bez samego hasła dla bezpieczeństwa).
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Użytkownik wybiera wzorzec “Łatwe do zapamietania” - system generuje “Kotek42Piesek”. Obok hasła widzi pasek siły: zielony = silne. Może wygenerowac 5 haseł naraz i wyeksportowac historie do CSV. Opcja “Wyklucz podobne znaki” usuwa 0/O/l/1/I z zestawu.
Zestawy znakow:
$lowercase = 'abcdefghijklmnopqrstuvwxyz';$uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';$numbers = '0123456789';$special = '!@#$%^&*()_+-=[]{}|;:,.<>?';
$characters = '';if (isset($_POST['lowercase'])) $characters .= $lowercase;if (isset($_POST['uppercase'])) $characters .= $uppercase;if (isset($_POST['numbers'])) $characters .= $numbers;if (isset($_POST['special'])) $characters .= $special;Bezpieczne generowanie hasła:
function generatePassword(string $characters, int $length): string { $password = ''; $charLength = strlen($characters);
for ($i = 0; $i < $length; $i++) { // random_int() jest kryptograficznie bezpieczne (w przeciwienstwie do rand()) $index = random_int(0, $charLength - 1); $password .= $characters[$index]; }
return $password;}Walidacja parametrow:
$length = (int)$_POST['length'];
if ($length < 8 || $length > 32) { $errors[] = "Długość hasła musi być miedzy 8 a 32 znakow";}
if (empty($characters)) { $errors[] = "Wybierz co najmniej jeden zestaw znakow";}Analiza siły hasła:
function analyzeStrength(int $length, bool $hasLower, bool $hasUpper, bool $hasNumbers, bool $hasSpecial): string { $score = 0; if ($length >= 12) $score++; if ($length >= 16) $score++; if ($hasLower && $hasUpper) $score++; if ($hasNumbers) $score++; if ($hasSpecial) $score++;
if ($score >= 4) return 'strong'; if ($score >= 2) return 'medium'; return 'weak';}Wykorzystaj lekcje!
Cotygodniowe spotkania podczas lekcji to idealny moment, by:
Pracuj iteracyjnie - lepiej mieć działający wariant A niz niedokonczony C!