W dzisiejszych czasach, kiedy coraz więcej aspektów naszego życia przenosi się do świata wirtualnego, kwestia bezpieczeństwa nabiera szczególnego znaczenia. Jednym z kluczowych elementów ochrony naszej prywatności są hasła.
W tym artykule zaprezentujemy, jak stworzyć generator haseł, który pozwoli na szybkie generowanie mocnych, losowych kombinacji znaków.
Dlaczego warto korzystać z generatora haseł?
Tworzenie różnorodnych i skomplikowanych haseł na zawołanie nie jest łatwe dla człowieka.
Komputery, z drugiej strony, potrafią generować losowe i silne hasła w mgnieniu oka, bazując na naszych preferencjach. Dostępnych jest wiele gotowych rozwiązań, ale…
Czy nie byłoby wspaniale móc stworzyć własne, w pełni dostosowane do naszych potrzeb narzędzie?
Oczywiście, że tak! W tym artykule pokażemy, jak to zrobić krok po kroku.
Przejdźmy zatem do działania i zbudujmy nasz generator haseł.
Generator haseł 💻
Największą zaletą tworzenia własnego generatora jest pełna kontrola nad jego funkcjonalnością. Możemy dostosować go dokładnie do naszych wymagań.
Na początek stworzymy prosty generator, który pobiera od użytkownika długość hasła, a następnie generuje losową kombinację cyfr, liter i znaków specjalnych.
Następnie rozbudujemy go o możliwość precyzyjnego określenia liczby poszczególnych rodzajów znaków w haśle.
Zatem bez zbędnej zwłoki, zobaczmy jak za pomocą języka Python możemy stworzyć nasz generator haseł.
Etapy budowy generatora
- Zapisz wszystkie możliwe znaki do wygenerowania hasła w postaci listy. Możesz skorzystać z wbudowanego modułu `string` Pythona lub ręcznie zdefiniować listę.
- Poproś użytkownika o podanie pożądanej długości hasła.
- Wymieszaj losowo listę znaków za pomocą funkcji `random.shuffle`.
- Utwórz pustą listę, która posłuży do przechowywania generowanego hasła.
- Napisz pętlę, która będzie iterować tyle razy, ile wynosi długość hasła.
- W każdej iteracji wybierz losowy znak z listy wszystkich znaków za pomocą funkcji `random.choice`.
- Dodaj wylosowany znak do listy hasła.
- Wymieszaj losowo listę z hasłem, aby zwiększyć losowość.
- Przekształć listę hasła w ciąg znaków za pomocą funkcji `join`.
- Wyświetl wygenerowane hasło.
Wykonaj powyższe kroki i spróbuj napisać kod. Jeśli nie czujesz się na siłach, nic straconego! Poniżej znajdziesz gotowy kod.
Kod
import string import random ## znaki, z których będzie generowane hasło characters = list(string.ascii_letters + string.digits + "[email protected]#$%^&*()") def generate_random_password(): ## pobierz od użytkownika długość hasła length = int(input("Podaj długość hasła: ")) ## wymieszaj znaki random.shuffle(characters) ## wybierz losowe znaki z listy password = [] for i in range(length): password.append(random.choice(characters)) ## wymieszaj wynikowe hasło random.shuffle(password) ## zamień listę na ciąg znaków ## wypisz listę print("".join(password)) ## wywołaj funkcję generate_random_password()
Powyższy kod jest dość intuicyjny. Wykonuje on dokładnie kroki, które zostały opisane powyżej. Jeśli dokładnie przeczytałeś wcześniejszy opis, zrozumienie tego kodu nie powinno stanowić żadnego problemu.
Uruchom kod i wygeneruj pierwsze hasło. Przykładowy wynik może wyglądać następująco:
Podaj długość hasła: 10 d&amIzK%d)
Przyjrzyj się hasłu w powyższym przykładzie. Czy zawiera cyfrę? Niekoniecznie. Program nie gwarantuje, że w hasło będą wchodzić cyfry.
Aby zagwarantować obecność cyfr oraz znaków specjalnych, rozbudujemy nasz program. Dodamy do niego opcję pozwalającą użytkownikowi na określenie, ile cyfr, liter i znaków specjalnych ma zawierać hasło.
Gdy użytkownik poda liczbę znaków dla każdego rodzaju, program zadba o to, aby wygenerowane hasło zawierało odpowiednią liczbę poszczególnych rodzajów znaków.
Spójrzmy na kod, który pozwala na wprowadzenie liczby znaków każdego rodzaju i generuje na tej podstawie hasło.
import string import random ## znaki, z których będzie generowane hasło alphabets = list(string.ascii_letters) digits = list(string.digits) special_characters = list("[email protected]#$%^&*()") characters = list(string.ascii_letters + string.digits + "[email protected]#$%^&*()") def generate_random_password(): ## pobierz od użytkownika długość hasła length = int(input("Podaj długość hasła: ")) ## liczba znaków każdego rodzaju alphabets_count = int(input("Podaj liczbę liter w haśle: ")) digits_count = int(input("Podaj liczbę cyfr w haśle: ")) special_characters_count = int(input("Podaj liczbę znaków specjalnych w haśle: ")) characters_count = alphabets_count + digits_count + special_characters_count ## sprawdź czy suma znaków nie przekracza długości hasła ## jeżeli przekracza, wypisz odpowiedni komunikat if characters_count > length: print("Suma znaków przekracza długość hasła") return ## zainicjalizuj puste hasło password = [] ## dodaj losowe litery for i in range(alphabets_count): password.append(random.choice(alphabets)) ## dodaj losowe cyfry for i in range(digits_count): password.append(random.choice(digits)) ## dodaj losowe znaki specjalne for i in range(special_characters_count): password.append(random.choice(special_characters)) ## jeżeli suma znaków jest mniejsza niż długość hasła ## dodaj losowe znaki, aby hasło miało wymaganą długość if characters_count < length: random.shuffle(characters) for i in range(length - characters_count): password.append(random.choice(characters)) ## wymieszaj wynikowe hasło random.shuffle(password) ## zamień listę na ciąg znaków ## wypisz listę print("".join(password)) ## wywołaj funkcję generate_random_password()
Czym różni się ten kod od poprzedniego?
- Dodaliśmy osobne pętle dla każdego rodzaju znaków, aby dodać odpowiednie znaki do hasła.
- Wprowadziliśmy warunkowe sprawdzenia, które weryfikują relację między liczbą znaków a długością hasła.
Dodaliśmy trochę kodu, ale ogólna logika jest podobna do tej z poprzedniej wersji. Zrozumienie tego kodu nie powinno sprawić Ci trudności.
Czas na uruchomienie i sprawdzenie efektów. Poniżej przykład działania programu.
Podaj długość hasła: 10 Podaj liczbę liter w haśle: 3 Podaj liczbę cyfr w haśle: 2 Podaj liczbę znaków specjalnych w haśle: 3 V2(&#XlQq1
Jak widać, tym razem wygenerowane hasło zawiera minimalną liczbę znaków każdego rodzaju, zgodnie z preferencjami użytkownika. Dodatkowo program uzupełnił hasło o 2 losowe znaki, aby osiągnąć zadaną długość.
Sukces! Stworzyliśmy w pełni funkcjonalny generator silnych haseł!
Podsumowanie
Przeanalizowaliśmy proces tworzenia generatora haseł od podstaw. Czy możemy dodać do niego jeszcze więcej funkcji? Oczywiście! Możemy dodawać dowolne udoskonalenia. Najważniejsze jednak, aby wygenerowane hasło było silne.
Skorzystaj z kodu i generuj własne hasła do swoich internetowych kont.
Do tego czasu, możesz skorzystać z generatora losowych haseł newsblog.pl, aby tworzyć bezpieczne hasła.
Zachęcamy również do zapoznania się z artykułami o równości i nierówności w programowaniu oraz stworzeniu gry w kółko i krzyżyk w Pythonie.
Udanej zabawy z kodowaniem! 👩💻
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.