Python ile Rastgele Şifre Oluşturma ve Kaydetme

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.

“Python ile Rastgele Şifre Oluşturma ve Kaydetme” üzerine 2 yorum

  1. bu kod çalışmıyor çalışması run dediğimde altta çıkan yere istediğim komutu yazamıyorum

Bir Cevap Yazın