Security
import getpass
import time
import hashlib
import json
import os
import secrets # Güvenli rastgele sayılar için
from datetime import datetime
class GuvenlikSistemi:
def __init__(self):
self.kullanici_dosyasi = "kullanicilar.json"
self.log_dosyasi = "guvenlik_log.json"
self.max_deneme = 3
self.kilit_suresi = 30
def _hash_yap(self, pin, salt):
"""PIN ve Salt'ı birleştirip hashler."""
return hashlib.sha256((pin + salt).encode()).hexdigest()
def kullanici_olustur(self, ad, p1, p2):
"""Kullanıcıyı benzersiz salt değerleriyle kaydeder."""
kullanicilar = self._verileri_yukle()
# Her kullanıcı için benzersiz tuzlar (salt)
s1, s2 = secrets.token_hex(8), secrets.token_hex(8)
kullanicilar[ad] = {
"pin1": self._hash_yap(p1, s1), "salt1": s1,
"pin2": self._hash_yap(p2, s2), "salt2": s2,
"hatali_deneme": 0,
"son_hatali_zaman": 0
}
self._verileri_kaydet(kullanicilar)
print(f"✨ Kullanıcı '{ad}' yüksek güvenlikli tuzlama ile eklendi.")
def _verileri_yukle(self):
if os.path.exists(self.kullanici_dosyasi):
with open(self.kullanici_dosyasi, "r") as f: return json.load(f)
return {}
def _verileri_kaydet(self, veri):
with open(self.kullanici_dosyasi, "w") as f: json.dump(veri, f, indent=4)
def giris_yap(self):
print(f"\n{'='*40}\n🛡️ GELİŞMİŞ GÜVENLİK TERMİNALİ\n{'='*40}")
ad = input("👤 Kullanıcı: ").strip()
veriler = self._verileri_yukle()
if ad not in veriler:
print("❌ Kullanıcı bulunamadı.")
return
k = veriler[ad]
# Kilit Kontrolü
kalan_kilit = self.kilit_suresi - (time.time() - k["son_hatali_zaman"])
if k["hatali_deneme"] >= self.max_deneme and kalan_kilit > 0:
print(f"🔒 HESAP KİLİTLİ! {int(kalan_kilit)} saniye bekleyin.")
return
# PIN Doğrulama Döngüsü (Aşama 1 ve 2)
for asama in [1, 2]:
print(f"\n🔑 AŞAMA {asama}")
basarili = False
# İç deneme döngüsü
while k["hatali_deneme"] < self.max_deneme:
girilen = getpass.getpass(f"PIN-{asama} girin: ")
target_hash = k[f"pin{asama}"]
target_salt = k[f"salt{asama}"]
if self._hash_yap(girilen, target_salt) == target_hash:
print(f"✅ Aşama {asama} onaylandı.")
basarili = True
# Başarılı olunca o aşama için deneme sayısını sıfırlayabiliriz veya devam edebiliriz
break
else:
k["hatali_deneme"] += 1
k["son_hatali_zaman"] = time.time()
print(f"⚠️ Yanlış! Kalan hak: {self.max_deneme - k['hatali_deneme']}")
self._verileri_kaydet(veriler)
if not basarili:
print("⛔ Çok fazla hatalı deneme. Erişim sonlandırıldı.")
return
# Giriş Başarılı
k["hatali_deneme"] = 0 # Başarılı girişte sayacı sıfırla
self._verileri_kaydet(veriler)
print(f"\n{'*'*40}\n🔓 ERİŞİM ONAYLANDI! Hoş geldin, {ad}.\n{'*'*40}")
# --- KULLANIM ---
sistem = GuvenlikSistemi()
# Not: İlk çalıştırmada kullanıcı oluşturmak için alttaki satırı bir kez aktif et:
# sistem.kullanici_olustur("stefan", "5854", "2028")
sistem.giris_yap()
0 条评论