\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_simplified.py |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Veritabanı yedekleri için şifreleme yardımcı fonksiyonları.
"""
import os
import logging
import tempfile
import subprocess
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 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 (kullanılmıyor)
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"
# Şifre verilmemişse çevre değişkeninden al
if not passphrase:
passphrase = os.environ.get('BACKUP_ENCRYPTION_PSK', '')
if passphrase:
logger.info("Şifreleme parolası çevre değişkeninden alındı (BACKUP_ENCRYPTION_PSK)")
# Şifre yoksa şifreleme yapmaya çalışma
if not passphrase:
logger.error("Şifreleme için parola bulunamadı, lütfen şifre belirtin veya çevre değişkeni ayarlayın")
return None
# Echo ile şifreyi göndererek GPG komutunu çalıştırma (stdin üzerinden şifre göndermek için)
echo_cmd = f'echo "{passphrase}" | gpg --batch --yes --passphrase-fd 0 --output {output_file} --symmetric {input_file}'
# Komutu çalıştır (şifreyi göstermeyecek şekilde logla)
safe_cmd = echo_cmd.replace(passphrase, "*****")
logger.info(f"GPG komutu çalıştırılıyor: {safe_cmd}")
result = subprocess.run(echo_cmd, shell=True, capture_output=True, text=True)
# Sonucu kontrol et
if result.returncode == 0:
logger.info(f"Dosya başarıyla şifrelendi: {output_file}")
return output_file
else:
logger.error(f"Dosya şifreleme hatası: {result.returncode}")
logger.error(f"Hata detayı: {result.stderr}")
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)
# Şifre verilmemişse çevre değişkeninden al
if not passphrase:
passphrase = os.environ.get('BACKUP_ENCRYPTION_PSK', '')
if passphrase:
logger.info("Şifre çözme parolası çevre değişkeninden alındı (BACKUP_ENCRYPTION_PSK)")
# Şifre yoksa şifre çözme yapmaya çalışma
if not passphrase:
logger.error("Şifre çözme için parola bulunamadı, lütfen şifre belirtin veya çevre değişkeni ayarlayın")
return None
# Echo ile şifreyi göndererek GPG komutunu çalıştırma (stdin üzerinden şifre göndermek için)
echo_cmd = f'echo "{passphrase}" | gpg --batch --yes --passphrase-fd 0 --output {output_file} --decrypt {input_file}'
# Komutu çalıştır (şifreyi göstermeyecek şekilde logla)
safe_cmd = echo_cmd.replace(passphrase, "*****")
logger.info(f"GPG komutu çalıştırılıyor: {safe_cmd}")
result = subprocess.run(echo_cmd, shell=True, capture_output=True, text=True)
# Sonucu kontrol et
if result.returncode == 0:
logger.info(f"Dosya şifresi başarıyla çözüldü: {output_file}")
return output_file
else:
logger.error(f"Dosya şifre çözme hatası: {result.returncode}")
logger.error(f"Hata detayı: {result.stderr}")
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) - Python-gnupg modülünü kullanmadığımız için boş liste döner
"""
# Python-gnupg yerine doğrudan komut kullanıldığı için boş döner
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
"""
# Bu işlev uygulanmamış - ihtiyaç duyulursa doğrudan komut kullanarak uygulanabilir
return None
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)
"""
# Bu işlev uygulanmamış - şu anda simetrik şifreleme için anahtara ihtiyaç yok
return None