Python ile küçük bir şifre oluşturma ve bunları sqlite ile kaydetme uygulaması uygulaması yaparak güzel bir pratik yapacağız.
Uygulama komut satırından kullanılacak, alabileceği komutlar şu şekilde olacak;
- create: rastgele bir şifre oluşturup konsola yazacak.
- list: kayıtlı şifreleri listeleyecek
- save: iki parametre daha alacak, kayıt edilmesi istenen şifre ve ona ait bir bilgi
Kod üzerinde yaptıklarımı açıklamaya çalıştım.
import sys import sqlite3 from random import shuffle from random import randint class simplePS: # hatalı komutlarda nasıl kullanılacağı hakkında bilgi döndürelim howto = ''' create: Rastgele bir şifre oluştur. 2 parametre alır -u: içinde büyük harf bulundurur -d: içinde sayı bulundurur save: Şifreyi kaydeder. 2 parametre alır -p: Kayıt edilecek şifre, kullanılmaz ise create ile üretilen son şifre kullanılır. (-p=yeniSifrem) -i: Şifre ile eşleştirilecek bilgi. list: Kayıtlı bütün şifreleri listeler ''' # şifrelerimizi oluşturacağımız kelimeler corpus = ['polish', 'woman', 'account', 'contain', 'rub', 'need', 'summon', 'consider', 'sheep', 'flashy', 'difficult', 'delightful', 'impart', 'prison', 'nourish', 'graceful', 'carve', 'travel', 'person', 'dress', 'rare', 'scale', 'stoop', 'bury', 'skillful', 'addicted', 'seed', 'lamentable', 'fallacious', 'underwear', 'prohibit', 'feel', 'guarded', 'tail', 'example', 'condemned', 'thankful', 'match', 'coat', 'erect', 'overwrought', 'challenge', 'cool', 'deep', 'party', 'bow', 'airplane', 'shape', 'blush', 'servant', 'green', 'blue', 'purple', 'yellow', 'apple', 'aura', 'african'] # veritabanı ismi dbname = 'ps' def __init__(self): if len(sys.argv) > 1: # sys.argv konsolda "python" komutundan sonra girdiğimiz # değerleri barındırır. sys.argv[0] dosyamızın adı # ilk parametre komutumuz command = sys.argv[1] # Bir veritabanı bağlantısı açarak tablomuzu yoksa oluşturuyoruz self.conn = sqlite3.connect(self.dbname) self.conn.execute('''CREATE TABLE IF NOT EXISTS passwords (ID INTEGER PRIMARY KEY AUTOINCREMENT, PASS TEXT NOT NULL, INFO TEXT NOT NULL);''') # komutumuza göre hangi metodu çağıracağımıza karar veriyoruz if command == "create": self.create_password() elif command == "save": self.save() elif command == "list": self.list() elif command == "-help": self.help() else: # tanımlı bir komut girilmemişse yardım edelim print(self.howto) # veritabanı bağlantısını kapatıyoruz self.conn.close() else: # bir parametre girilmemişse yardım edelim print(self.howto) def create_password(self): contains_uppercase = False contains_number = False # girilen parametreleri alarak şifremizi oluşturuyoruz for i,p in enumerate(sys.argv): # 0 => dosya adı 1 => create if i > 1: if p == '-u': contains_uppercase = True elif p == '-d': contains_number = True # kelime listemizi karıştıralım shuffle(self.corpus) password = self.corpus[0] + '_' + self.corpus[1] + '_' + self.corpus[2] if contains_uppercase: # eğer büyük harf barındıracaksa her kelimenin ilk harfini büyük haline çeviriyoruz. # rastgele harfler seçilerek de eklenebilir bu özellik password = [w[0].upper() + w[1:] for w in password.split('_')] password = "_".join(password) if contains_number: password += '_' + str(randint(0, 99)) # veritabanına kayıt edelim info = "Son üretilen şifre" self.conn.execute("INSERT OR REPLACE INTO passwords VALUES (?,?,?)", (1, password, info)) self.conn.commit() print(password) def save(self): password = '' info = '' warning = 'Eksik parametre girdiniz. Kullanım için; simpleps.py -help' for i,p in enumerate(sys.argv): # 0 => dosya adı 1 => save if i > 1: if p.startswith('-p='): password = p[3:] elif p.startswith('-i='): info = p[3:] if len(password) == 0: # -p parametresi boş/yok. # son üretilen şifreyi getirelim. ID sini 1 atamıştık last_cursor = self.conn.execute("SELECT * FROM passwords WHERE ID=1 ") for row in last_cursor: password = row[1] if len(password) > 0 and len(info)>0: # Şifre ve bilgiyi kayıt edelim. ID autoincrement olduğu için None girerek sqlite a bırakıyoruz. self.conn.execute("INSERT INTO passwords VALUES (?,?,?)", (None, password,info)) self.conn.commit() print('Kayıt başarılı.') else: print(warning) def list(self): list_cursor = self.conn.execute("SELECT * FROM passwords ") for row in list_cursor: print(str(row[0]) + "\t\t\t" + row[1] + "\t\t\t" + row[2]) def help(self): print(self.howto) simplePS()
Dosyanızın olduğu klasörde bir komut satırı açıp “dosyaadi.py -help” şeklinde çalıştırabilirsiniz.
Bir cevap yazın