Güvenli Şifre Oluşturma Kodu

Güvenli şifre oluşturma artık oldukça büyük bir sorun. Özellikle bazı sistemlerin giriş kontrolü ya da “insan mısınız” kontrolünü yapmadığını düşünürsek basit şifreler kullanmak oldukça tehlikelidir.

Bu python kodu bize güvenli şifre [rastgele] oluşturmamıza yardımcı olacaktır.

Güvenli şifre oluşturmak için 2 noktaya bakıyoruz:

  • Şifre uzunluğu 8 – 16 karakter arasında olmalı
  • Şifre büyük harf, küçük harf, rakam ve özel karakter içermeli.

Gerçek bir güvenli şifre ise bundan çok daha komplikedir. O konuya belki sonra değiniriz. Buradaki asıl amacımız kullanıcıdan veri girişleri alarak gereken sets değişkenlerinden verileri almak.

Python
import secrets
import string

def get_password_length():
    """Kullanıcıdan 8-16 arası geçerli bir uzunluk alır."""
    while True:
        try:
            length = int(input("Şifre uzunluğu (8-16 arası): "))
            if 8 <= length <= 16:
                return length
            else:
                print("Hata: Uzunluk 8 ile 16 arasında olmalıdır.")
        except ValueError:
            print("Hata: Lütfen geçerli bir sayı girin.")

def get_character_sets():
    """Kullanıcıya hangi karakter türlerini dahil edeceğini sorar."""
    print("\nHangi karakter türlerini kullanmak istersiniz? (e/h)")
    sets = {}
    sets["büyük harf"] = string.ascii_uppercase
    sets["küçük harf"] = string.ascii_lowercase
    sets["rakam"] = string.digits
    sets["özel karakter"] = string.punctuation  # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

    selected = []
    for name, chars in sets.items():
        while True:
            cevap = input(f"{name} dahil edilsin mi? (e/h): ").strip().lower()
            if cevap in ("e", "h"):
                if cevap == "e":
                    selected.append(chars)
                break
            else:
                print("Lütfen 'e' veya 'h' girin.")

    if not selected:
        print("En az bir karakter türü seçmelisiniz. Varsayılan olarak tüm türler seçiliyor.")
        selected = list(sets.values())
    return selected

def generate_password(length, char_sets):
    """
    Belirtilen uzunlukta ve karakter setlerinden oluşan bir şifre üretir.
    Her setten en az bir karakter bulunmasını garanti eder.
    """
    # Tüm karakter havuzu
    all_chars = ''.join(char_sets)

    # Her setten en az bir karakter seç
    password_parts = [secrets.choice(chars) for chars in char_sets]

    # Kalan karakterleri rastgele doldur
    remaining = length - len(password_parts)
    if remaining > 0:
        password_parts.extend(secrets.choice(all_chars) for _ in range(remaining))

    # Karakterleri karıştır (ilk kısım setlerden seçildiği için başlangıçta sıralı olabilir)
    secrets.SystemRandom().shuffle(password_parts)

    return ''.join(password_parts)

def main():
    print("=== Güvenli Şifre Oluşturucu ===\n")
    length = get_password_length()
    char_sets = get_character_sets()
    password = generate_password(length, char_sets)
    print(f"\nOluşturulan şifre: {password}")
    print(f"Uzunluk: {len(password)} karakter")

if __name__ == "__main__":
    main()

Burada dikkat etmenizi istediğim sets tanımlarken ascii karakterlerini kullandık. Bunun anlamı şudur. Kullanıcı büyük veya küçük harf seçtiğinde Türkçe karakter’ler gelmez. Sadece İngilizce (Latin) karakterler seçilir.

string.ascii_uppercase: ABCDEFGHIJKLMNOPQRSTUVWXYZ
string.ascii_lowercase: abcdefghijklmnopqrstuvwxyz
string.digits: 0123456789
string.punctuation: !"#$%&'()*+,-./:;<=>?@[\]^_{|}~

Eğer ille de Türkçe karakterler de olsun derseniz aşağıdaki kodları değiştirebilirsiniz:

Python
sets["büyük harf"] = string.ascii_uppercase + "ÇĞİÖŞÜ"
sets["küçük harf"] = string.ascii_lowercase + "çğıöşü"

Similar Posts

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir