\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 csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv7/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv7/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)

© KUJUNTI.ID