\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82
| Path : /var/www/html/yedekledb24/DatabaseBackupMasterv5/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv5/encryption_utils.py.bak |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Veritabanı yedekleri için şifreleme yardımcı fonksiyonları.
"""
import os
import logging
import tempfile
import gnupg
from pathlib import Path
# Logging yapılandırması
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def generate_gpg_key(name, email, passphrase=None, key_type="RSA", key_length=2048):
"""
GPG anahtar çifti oluşturur.
Args:
name (str): Anahtar sahibinin adı
email (str): Anahtar sahibinin e-posta adresi
passphrase (str, optional): Özel anahtar için şifre
key_type (str): Anahtar türü (RSA veya DSA)
key_length (int): Anahtar uzunluğu (bit cinsinden)
Returns:
dict: Oluşturulan anahtar bilgileri veya None (başarısız olursa)
"""
try:
# GPG home dizini oluştur (yoksa) - Uygulama konumunda
base_path = os.environ.get('GPG_HOME_DIR', os.path.dirname(os.path.abspath(__file__)))
gpg_home = os.path.join(base_path, 'gpg_keys')
os.makedirs(gpg_home, exist_ok=True)
# GnuPG nesnesi oluştur (basit yöntem)
gpg = gnupg.GPG(homedir=gpg_home)
# Anahtar üretim parametreleri
key_params = {
'key_type': key_type,
'key_length': key_length,
'name_real': name,
'name_email': email,
}
if passphrase:
key_params['passphrase'] = passphrase
# Anahtar üret
input_data = gpg.gen_key_input(**key_params)
key = gpg.gen_key(input_data)
if key:
# Anahtar bilgilerini döndür
fingerprint = key.fingerprint
pubkey = gpg.export_keys(fingerprint)
# Bazı GPG sürümlerinde passphrase parametresi desteklenmiyor
try:
privkey = gpg.export_keys(fingerprint, secret=True, passphrase=passphrase)
except TypeError:
# Eski GPG sürümleri için alternatif (passphrase parametresi olmadan)
privkey = gpg.export_keys(fingerprint, secret=True)
logger.info(f"GPG anahtar çifti oluşturuldu: {fingerprint}")
return {
'fingerprint': fingerprint,
'public_key': pubkey,
'private_key': privkey,
'name': name,
'email': email
}
else:
logger.error("GPG anahtar çifti oluşturulamadı")
return None
except Exception as e:
logger.error(f"GPG anahtar oluşturma hatası: {str(e)}")
return None
def encrypt_file(input_file, recipients=None, output_file=None, passphrase=None):
"""
Bir dosyayı GPG ile şifreler.
Args:
input_file (str): Şifrelenecek dosyanın yolu
recipients (list, optional): Alıcı e-posta adresleri listesi (anahtar ID'leri)
output_file (str, optional): Çıktı dosyasının yolu (belirtilmezse input_file + .gpg)
passphrase (str, optional): Şifreleme için şifre (symmetric encryption için)
Returns:
str: Şifrelenmiş dosyanın yolu veya None (başarısız olursa)
"""
try:
# Çıktı dosyası belirtilmemişse varsayılan kullan
if not output_file:
output_file = f"{input_file}.gpg"
# GPG home dizini - Çevre değişkeninden
base_path = os.environ.get('GPG_HOME_DIR', os.path.dirname(os.path.abspath(__file__)))
gpg_home = os.path.join(base_path, 'gpg_keys')
os.makedirs(gpg_home, exist_ok=True)
# GnuPG nesnesi (basit yöntem)
gpg = gnupg.GPG(homedir=gpg_home)
# Dosyayı aç
with open(input_file, 'rb') as f:
# Şifreleme yöntemi seç
if recipients:
# Asimetrik şifreleme (public key)
status = gpg.encrypt_file(f, recipients, output=output_file, always_trust=True)
else:
# Simetrik şifreleme (passphrase)
status = gpg.encrypt_file(f, None, passphrase=passphrase,
symmetric=True, output=output_file)
if status.ok:
logger.info(f"Dosya başarıyla şifrelendi: {output_file}")
return output_file
else:
logger.error(f"Dosya şifreleme hatası: {status.status}")
logger.error(f"Hata detayı: {status.stderr if hasattr(status, 'stderr') else 'Bilinmiyor'}")
return None
except Exception as e:
logger.error(f"Dosya şifreleme işlemi sırasında hata: {str(e)}")
return None
def decrypt_file(input_file, output_file=None, passphrase=None):
"""
GPG ile şifrelenmiş bir dosyayı çözer.
Args:
input_file (str): Şifresi çözülecek dosyanın yolu
output_file (str, optional): Çıktı dosyasının yolu
passphrase (str, optional): Şifre çözme için şifre
Returns:
str: Şifresi çözülmüş dosyanın yolu veya None (başarısız olursa)
"""
try:
# Çıktı dosyası belirtilmemişse geçici dosya oluştur
if not output_file:
input_path = Path(input_file)
# .gpg uzantısını kaldır
output_name = input_path.stem if input_path.suffix.lower() == '.gpg' else input_path.name
output_file = os.path.join(tempfile.gettempdir(), output_name)
# GPG home dizini - Çevre değişkeninden
base_path = os.environ.get('GPG_HOME_DIR', os.path.dirname(os.path.abspath(__file__)))
gpg_home = os.path.join(base_path, 'gpg_keys')
os.makedirs(gpg_home, exist_ok=True)
# GnuPG nesnesi (basit yöntem)
gpg = gnupg.GPG(homedir=gpg_home)
# Dosyayı aç ve şifresini çöz
with open(input_file, 'rb') as f:
status = gpg.decrypt_file(f, passphrase=passphrase, output=output_file)
if status.ok:
logger.info(f"Dosya şifresi başarıyla çözüldü: {output_file}")
return output_file
else:
logger.error(f"Dosya şifre çözme hatası: {status.status}")
logger.error(f"Hata detayı: {status.stderr if hasattr(status, 'stderr') else 'Bilinmiyor'}")
return None
except Exception as e:
logger.error(f"Dosya şifre çözme işlemi sırasında hata: {str(e)}")
return None
def list_gpg_keys():
"""
Mevcut GPG anahtarlarını listeler.
Returns:
tuple: (public_keys, private_keys)
"""
try:
# GPG home dizini - Çevre değişkeninden
base_path = os.environ.get('GPG_HOME_DIR', os.path.dirname(os.path.abspath(__file__)))
gpg_home = os.path.join(base_path, 'gpg_keys')
os.makedirs(gpg_home, exist_ok=True)
# GnuPG nesnesi (basit yöntem)
gpg = gnupg.GPG(homedir=gpg_home)
# Anahtarları getir
public_keys = gpg.list_keys()
private_keys = gpg.list_keys(True)
return (public_keys, private_keys)
except Exception as e:
logger.error(f"GPG anahtarları listelenirken hata: {str(e)}")
return ([], [])
def import_gpg_key(key_data, private=False):
"""
GPG anahtarını içe aktarır.
Args:
key_data (str): Anahtar verisi (ASCII-armored)
private (bool): Özel anahtar mı?
Returns:
str: İçe aktarılan anahtarın parmak izi veya None
"""
try:
# GPG home dizini - Çevre değişkeninden
base_path = os.environ.get('GPG_HOME_DIR', os.path.dirname(os.path.abspath(__file__)))
gpg_home = os.path.join(base_path, 'gpg_keys')
os.makedirs(gpg_home, exist_ok=True)
# GnuPG nesnesi (basit yöntem)
gpg = gnupg.GPG(homedir=gpg_home)
# Anahtarı içe aktar
import_result = gpg.import_keys(key_data)
if import_result.count > 0:
logger.info(f"GPG anahtarı başarıyla içe aktarıldı")
return import_result.fingerprints[0]
else:
logger.error("GPG anahtarı içe aktarılamadı")
return None
except Exception as e:
logger.error(f"GPG anahtarı içe aktarılırken hata: {str(e)}")
return None
# Test için ana fonksiyon
if __name__ == "__main__":
# Test verileri
test_file = "test_file.txt"
with open(test_file, 'w') as f:
f.write("Bu bir test dosyasıdır. GPG şifreleme testi.")
# Anahtar oluştur
key_info = generate_gpg_key("Test User", "test@example.com", "test123")
if key_info:
# Dosyayı şifrele
recipient = key_info['email']
encrypted_file = encrypt_file(test_file, [recipient])
if encrypted_file:
# Şifreli dosyayı çöz
decrypted_file = decrypt_file(encrypted_file, passphrase="test123")
if decrypted_file:
print(f"Şifreleme ve çözme başarılı: {decrypted_file}")
# Dosya içeriğini kontrol et
with open(decrypted_file, 'r') as f:
content = f.read()
print(f"Çözülen içerik: {content}")
# Temizlik
if os.path.exists(test_file):
os.remove(test_file)
if 'encrypted_file' in locals() and os.path.exists(encrypted_file):
os.remove(encrypted_file)
if 'decrypted_file' in locals() and os.path.exists(decrypted_file):
os.remove(decrypted_file)