ITADN

Security

#2010OpenStefan-as-se 创建于 2026-02-21
S
Stefan-as-secommented
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 条评论