Tento program, nazvaný “Zabezpečená registrace a přihlášení pomocí Pythonu a SQLite”, je sofistikovaný nástroj navržený pro vytvoření bezpečného prostředí pro správu uživatelských účtů. Využívá kombinaci Pythonu, jednoho z nejpopulárnějších programovacích jazyků dneška, a SQLite, lehké a samostatné databázové řešení, pro správu a ukládání uživatelských údajů.
import hashlib
import sqlite3
import os
volba = int(input("Chcete se zaregistrovat (1) nebo přihlásit (2): "))
def hashovat_heslo(heslo, sul):
p = hashlib.sha256()
p.update((heslo + sul).encode())
return p.hexdigest()
def vytvorit_sul():
return os.urandom(16).hex()
# Registrace
if volba == 1:
u = input("Uživatelské jméno: ")
p = input("Heslo: ")
sul = vytvorit_sul()
hash_hesla = hashovat_heslo(p, sul)
conn = sqlite3.connect("creds_new.db")
cur = conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS creds_new (user text, pass text, sul text)")
cur.execute("INSERT INTO creds_new VALUES (?, ?, ?)", (u, hash_hesla, sul))
conn.commit()
cur.close()
print("Úspěšně zaregistrováno")
# Přihlášení
elif volba == 2:
u_inp = input("Uživatelské jméno: ")
p_inp = input("Heslo: ")
conn = sqlite3.connect("creds_new.db")
cur = conn.cursor()
cur.execute("SELECT pass, sul FROM creds_new WHERE user=?", (u_inp,))
result = cur.fetchone()
if result:
hash_hesla_db, sul = result
p_hash = hashovat_heslo(p_inp, sul)
if p_hash == hash_hesla_db:
print("Přihlášení úspěšné")
else:
print("Špatné heslo")
else:
print("Uživatel nenalezen")
conn.commit()
cur.close()
# Vybrali jste špatnou volbu
else:
print("Špatná volba")
Program je založen na dvou hlavních funkcích: registraci a přihlášení. Registrace umožňuje uživatelům vytvářet nové účty pomocí jedinečného uživatelského jména a hesla. Tyto údaje jsou následně hashovány pomocí šifrovacího algoritmu SHA-256, což zajišťuje, že v databázi nejsou uložena skutečná hesla, ale jejich hash hodnoty. Toto je zásadní pro zabezpečení, protože i v případě úniku databáze by útočník získal pouze hash hodnoty, nikoli skutečná hesla.
Přihlašovací funkce pak ověřuje identitu uživatele porovnáním zadaného uživatelského jména a hesla s hash hodnotami uloženými v databázi. Pokud dojde k shodě, uživatel je úspěšně přihlášen.
Důležitou součástí programu je jeho zabezpečení proti SQL injekci. SQL injekce je technika, která může být použita k manipulaci s databází, ale tím, že tento program používá parametrizované dotazy, je tato hrozba minimalizována.
Tento program je tedy ideálním řešením pro každého, kdo hledá efektivní a bezpečný způsob správy uživatelských účtů v Pythonu. Jeho flexibilita a bezpečnostní opatření ho činí vhodným pro širokou škálu aplikací, od malých projektů po rozsáhlé databázové systémy.