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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
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.
ben çalıştıramadım nasıl çalıştıracağız bu kodu
bu kod çalışmıyor çalışması run dediğimde altta çıkan yere istediğim komutu yazamıyorum