Bezpečnost hraje v našich životech klíčovou roli. S přesunem mnoha aktivit do online prostředí nabývá zabezpečení na významu. V této souvislosti se často hovoří o důležitosti silných hesel.
V tomto článku si ukážeme, jak si vytvořit vlastní generátor hesel, který vám umožní rychle a snadno vytvářet náhodná a robustní hesla.
Proč potřebujeme generátor hesel?
Není snadné vymýšlet různorodá a složitá hesla z hlavy. Naštěstí počítače to dokáží hravě. Vytvoří silná a náhodná hesla na základě vašich požadavků během několika sekund. Existuje mnoho dostupných generátorů, ale my si ukážeme, jak si vytvořit takový, který si můžete přizpůsobit svým potřebám.
Můžeme si tedy vytvořit generátor hesel přesně podle svých představ?
Odpověď zní: ano! V následujícím textu si ukážeme, jak na to.
Pustíme se do tvorby vlastního generátoru hesel.
Generátor hesel 💻
Největší výhodou vlastního generátoru je jeho flexibilita. Můžete si ho plně přizpůsobit.
Začneme generátorem, který se zeptá na požadovanou délku hesla a následně vygeneruje náhodné heslo obsahující číslice, písmena a speciální znaky.
Následně ho zdokonalíme a umožníme uživateli specifikovat počet jednotlivých typů znaků, tedy kolik číslic, písmen a speciálních znaků má heslo obsahovat.
Pojďme se tedy bez zbytečných průtahů podívat, jak vytvořit generátor hesel pomocí programovacího jazyka Python.
Postup
- Nejprve si uložíme všechny znaky, ze kterých chceme generovat heslo, do seznamu. Můžeme využít modul
string
v Pythonu nebo znaky vypsat ručně. - Dále se uživatele zeptáme na požadovanou délku hesla.
- Seznam znaků zamícháme pomocí funkce
random.shuffle
. - Vytvoříme prázdný seznam, do kterého budeme ukládat jednotlivé znaky hesla.
- Vytvoříme smyčku, která se bude opakovat tolikrát, kolik znaků má mít heslo:
- Náhodně vybereme znak ze seznamu všech znaků pomocí funkce
random.choice
. - Vybraný znak přidáme do seznamu s heslem.
- Náhodně vybereme znak ze seznamu všech znaků pomocí funkce
- Následně ještě jednou zamícháme seznam s heslem, aby byla jeho náhodnost co největší.
- Převedeme seznam hesel na jeden řetězec pomocí funkce
join
. - Nakonec vygenerované heslo vypíšeme.
Zkuste si podle výše uvedeného postupu napsat vlastní kód. Nemějte obavy, pokud si nejste jisti, níže naleznete kompletní kód.
Kód
import string import random ## znaky pro generování hesla characters = list(string.ascii_letters + string.digits + "[email protected]#$%^&*()") def generate_random_password(): ## délka hesla od uživatele length = int(input("Zadejte délku hesla: ")) ## zamíchání znaků random.shuffle(characters) ## výběr náhodných znaků ze seznamu password = [] for i in range(length): password.append(random.choice(characters)) ## zamíchání výsledného hesla random.shuffle(password) ## převedení seznamu na řetězec ## vypsání hesla print("".join(password)) ## zavolání funkce generate_random_password()
Výše uvedený kód je poměrně srozumitelný. Jednoduše jsme převedli kroky z popisu do kódu. Pokud si tedy pozorně přečtete postup, nebude pro vás pochopení kódu žádný problém.
Nyní si kód spusťte a vygenerujte heslo. Příklad výstupu by mohl vypadat takto:
Zadejte délku hesla: 10 d&amIzK%d)
Všimněte si vygenerovaného hesla. Obsahuje nějakou číslici? Ne. To proto, že náš program negarantuje, že heslo bude obsahovat všechny typy znaků.
Nyní se pokusíme zajistit, aby program generoval hesla obsahující i číslice a speciální znaky. Způsobíme to tak, že se uživatele zeptáme na požadovaný počet jednotlivých typů znaků.
Pokud uživatel zadá počet znaků pro každý typ, program zajistí, že heslo bude obsahovat alespoň tento počet daného typu.
Podívejme se tedy na kód, který přijímá počet znaků pro každý typ a generuje heslo.
import string import random ## znaky pro generování hesla 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(): ## délka hesla od uživatele length = int(input("Zadejte délku hesla: ")) ## počet znaků jednotlivých typů alphabets_count = int(input("Zadejte počet písmen v hesle: ")) digits_count = int(input("Zadejte počet číslic v hesle: ")) special_characters_count = int(input("Zadejte počet speciálních znaků v hesle: ")) characters_count = alphabets_count + digits_count + special_characters_count ## kontrola celkového počtu znaků s délkou hesla ## vypsání hlášky, pokud je součet větší než délka if characters_count > length: print("Celkový počet znaků je větší než délka hesla") return ## inicializace hesla password = [] ## výběr náhodných písmen for i in range(alphabets_count): password.append(random.choice(alphabets)) ## výběr náhodných číslic for i in range(digits_count): password.append(random.choice(digits)) ## výběr náhodných speciálních znaků for i in range(special_characters_count): password.append(random.choice(special_characters)) ## pokud je celkový počet znaků menší než délka hesla ## přidáme náhodné znaky, aby se rovnal délce if characters_count < length: random.shuffle(characters) for i in range(length - characters_count): password.append(random.choice(characters)) ## zamíchání výsledného hesla random.shuffle(password) ## převedení seznamu na řetězec ## vypsání hesla print("".join(password)) ## zavolání funkce generate_random_password()
Jaký je tedy rozdíl mezi předchozím kódem a tímto?
- Pro každý typ znaku jsme vytvořili samostatné smyčky, abychom je přidali k heslu.
- Přidali jsme dvě podmíněné kontroly pro ověření celkového počtu znaků s délkou hesla.
Přidali jsme pár řádků kódu navíc, ale princip zůstává podobný jako u předchozího kódu. Neměli byste tedy mít problém s jeho pochopením.
Nyní je čas kód spustit a zkontrolovat výstup. Podívejte se na následující ukázkový běh.
Zadejte délku hesla: 10 Zadejte počet písmen v hesle: 3 Zadejte počet číslic v hesle: 2 Zadejte počet speciálních znaků v hesle: 3 V2(&#XlQq1
Pokud se podíváte na vygenerované heslo, vidíte, že obsahuje minimální počet znaků od každého typu, který uživatel požadoval. A navíc obsahuje dva další náhodné znaky, aby se délka hesla rovnala požadované délce.
Výborně! Máme funkční generátor silných hesel. 😎
Závěr
Ukázali jsme si, jak od začátku vytvořit generátor hesel. Můžeme do něj přidat další funkce? Samozřejmě, můžeme přidat libovolné množství funkcí. Jen je důležité dbát na to, aby výsledné heslo bylo dostatečně silné.
Vygenerujte si hesla pomocí našeho kódu a používejte je pro své online účty.
A pokud potřebujete rychle vygenerovat heslo, využijte generátor náhodných hesel na etechblog.cz.
Přečtěte si také, jak vytvořit hru piškvorky v Pythonu.
Příjemné kódování! 👩💻