Jak vytvořit generátor náhodných hesel v Pythonu

Bezpečnost je jednou z nejdůležitějších součástí našeho života. Důležitost zabezpečení se každým dnem zvyšuje, protože většina věcí jde online. Hesla vycházejí najevo, když mluvíme o bezpečnosti.

V tomto článku vytvoříme generátor hesel, který nám pomůže rychle generovat náhodná a silná hesla.

Proč potřebujeme generátor hesel?

Protože nemůžeme okamžitě myslet na různé vzory hesel.

Ale to není stejný případ s počítači. Počítače mohou generovat náhodná a silná hesla na základě našich přizpůsobení během několika sekund. K dispozici je mnoho generátorů hesel.

Můžeme si vytvořit vlastní s přizpůsobením, které se nám líbí?

Ano, určitě ho můžeme vytvořit. A zde vám ukážeme, jak na to.

Vytvoříme generátor hesel.

Table of Contents

Generátor hesel 💻

Nejlepší na vytvoření vlastního generátoru hesel je to, že si jej můžeme přizpůsobit, jak chceme.

Nejprve vytvoříme generátor hesel, který se zeptá na délku hesla a vygeneruje náhodné heslo obsahující číslice, abecedy a speciální znaky.

Dále jej vylepšíme tak, že se zeptáme na počet jednotlivých typů znaků, jako je počet číslic, abeced a speciálních znaků.

Pojďme se tedy bez dalších okolků podívat na kroky k vytvoření generátoru hesel pomocí Pythonu.

Kroky

  • Uložte všechny znaky jako seznam. Můžeme použít modul string v Pythonu nebo je napsat všechny.
  • Požádejte uživatele o zadání délky hesla.
  • Zamíchejte znaky pomocí metody random.shuffle.
  • Inicializujte prázdný seznam pro uložení hesla.
  • Napište smyčku, která iteruje délkové časy.
    • Vyberte náhodný znak ze všech znaků pomocí metody random.choice.
    • Přidejte k heslu náhodný znak.
  • Zamíchejte výsledný seznam hesel, aby byl náhodnější.
  • Převeďte seznam hesel na řetězec pomocí metody spojení.
  • Vytiskněte heslo.

Postupujte podle výše uvedených kroků a zkuste napsat kód. Nebojte se, i když nejste schopni napsat kód. Podívejte se na kód níže.

Kód

import string
import random


## characters to generate password from
characters = list(string.ascii_letters + string.digits + "[email protected]#$%^&*()")

def generate_random_password():
	## length of password from the user
	length = int(input("Enter password length: "))

	## shuffling the characters
	random.shuffle(characters)
	
	## picking random characters from the list
	password = []
	for i in range(length):
		password.append(random.choice(characters))

	## shuffling the resultant password
	random.shuffle(password)

	## converting the list to string
	## printing the list
	print("".join(password))



## invoking the function
generate_random_password()

Výše uvedený kód je samovysvětlující. Právě jsme provedli kroky popsané při psaní kódu. Takže pokud si přečtete kroky, nenajdete žádný problém s pochopením kódu.

Nyní spusťte kód a vygenerujte heslo. Příklad výstupu bude následující.

Enter password length: 10
d&amIzK%d)

Dodržujte heslo ve výše uvedeném výstupu. Je tam nějaká číslice? Ne. Protože neexistuje žádná záruka, že program bude obsahovat číslice.

Dále se snažíme zaručit, že program bude obsahovat číslice a speciální znaky tím, že požádáme uživatele, aby zadal požadovaný počet číslic, abeced a speciálních znaků.

Když uživatel zadá počet znaků pro každý typ, program zahrne příslušný počet typů znaků do hesla.

Podívejme se na kód, který přijímá počet znaků pro každý typ a generuje heslo.

import string
import random


## characters to generate password from
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():
	## length of password from the user
	length = int(input("Enter password length: "))

	## number of character types
	alphabets_count = int(input("Enter alphabets count in password: "))
	digits_count = int(input("Enter digits count in password: "))
	special_characters_count = int(input("Enter special characters count in password: "))

	characters_count = alphabets_count + digits_count + special_characters_count

	## check the total length with characters sum count
	## print not valid if the sum is greater than length
	if characters_count > length:
		print("Characters total count is greater than the password length")
		return


	## initializing the password
	password = []
	
	## picking random alphabets
	for i in range(alphabets_count):
		password.append(random.choice(alphabets))


	## picking random digits
	for i in range(digits_count):
		password.append(random.choice(digits))


	## picking random alphabets
	for i in range(special_characters_count):
		password.append(random.choice(special_characters))


	## if the total characters count is less than the password length
	## add random characters to make it equal to the length
	if characters_count < length:
		random.shuffle(characters)
		for i in range(length - characters_count):
			password.append(random.choice(characters))


	## shuffling the resultant password
	random.shuffle(password)

	## converting the list to string
	## printing the list
	print("".join(password))



## invoking the function
generate_random_password()

Jaký je tedy rozdíl mezi předchozím kódem a tímto kódem?

  • Pro každý typ znaku jsme napsali samostatné smyčky, abychom je přidali k heslu.
  • Existují dvě podmíněné kontroly pro ověření celkového počtu znaků s délkou hesla.

Přidali jsme další kód. Vzor je však podobný předchozímu kódu. Takže s jeho pochopením nebudete mít žádné potíže.

Nyní je čas provést a zkontrolovat výstup. Podívejte se na následující zkušební provoz.

Enter password length: 10
Enter alphabets count in password: 3
Enter digits count in password: 2
Enter special characters count in password: 3
V2(&#XlQq1

Pokud vidíte heslo vygenerované tentokrát, má minimální počet znaků, který uživatel chce. A program obsahuje další 2 náhodné znaky, aby se délka hesla rovnala zadání uživatele.

Hurá! máme kompletní generátor silných hesel. 😎

Závěr

Viděli jsme, jak vytvořit generátor hesel od začátku. Můžeme k tomu přidat další funkce? Ano, můžeme přidat kolik chceme. Ujistěte se však, že výsledné heslo je dostatečně silné.

Vygenerujte si hesla z kódu a použijte je pro svůj další online účet.

Zatímco to uděláte, použijte etechblog.cz generátor náhodných hesel k vytvoření bezpečných hesel.

Naučte se psát stejné nebo nerovné kódu a jak vytvořit tic-tac-toe hru v Pythonu.

Šťastné kódování! 👩‍💻