\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/DatabaseBackupMasterv4/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv4/fix_gpg_encryption.py |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
YedekleDB24 için GPG şifreleme yardımcı fonksiyonlarını güncelleyen script.
Python-GnuPG kütüphanesinin farklı sürümleriyle uyumluluk için güncelleme yapar.
"""
import os
import sys
import logging
import shutil
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 update_encryption_utils_file(file_path):
"""
Belirtilen şifreleme yardımcı dosyasını güncelleyerek daha yeni Python-GnuPG sürümleriyle uyumlu hale getirir.
Args:
file_path (str): Güncellenecek dosyanın yolu
Returns:
bool: Başarılı ise True, değilse False
"""
if not os.path.exists(file_path):
logger.error(f"Dosya bulunamadı: {file_path}")
return False
# Yedek oluştur
backup_path = f"{file_path}.bak"
shutil.copy2(file_path, backup_path)
logger.info(f"Yedek oluşturuldu: {backup_path}")
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# GPG başlatmasını güncelle
content = content.replace(
"gpg = gnupg.GPG(gnupghome=gpg_home_dir)",
"gpg = gnupg.GPG(homedir=gpg_home_dir)\n gpg.ignore_homedir_permissions = True"
)
# encrypt_file fonksiyonunu güncelle
if "def encrypt_file(" in content:
original_encrypt = """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:
# GPG nesnesini başlat
gpg_home_dir = os.environ.get('GPG_HOME_DIR', os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gpg_keys'))
gpg = gnupg.GPG(gnupghome=gpg_home_dir)
# Çıktı dosyasını belirle
if not output_file:
output_file = f"{input_file}.gpg"
# Şifreleme türünü belirle
symmetric = passphrase is not None and recipients is None
# Dosyayı şifrele
with open(input_file, 'rb') as f:
status = gpg.encrypt_file(
f,
recipients=recipients,
output=output_file,
symmetric=symmetric,
passphrase=passphrase,
always_trust=True
)
if status.ok:
logging.info(f"Dosya başarıyla şifrelendi: {output_file}")
return output_file
else:
logging.error(f"Dosya şifreleme hatası: {status.status}")
if hasattr(status, 'stderr'):
logging.error(f"Hata detayı: {status.stderr}")
return None
except Exception as e:
logging.error(f"Şifreleme sırasında hata oluştu: {str(e)}")
return None"""
new_encrypt = """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:
# GPG nesnesini başlat
gpg_home_dir = os.environ.get('GPG_HOME_DIR', os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gpg_keys'))
gpg = gnupg.GPG(homedir=gpg_home_dir)
gpg.ignore_homedir_permissions = True
# Çıktı dosyasını belirle
if not output_file:
output_file = f"{input_file}.gpg"
# Şifreleme türünü belirle
symmetric = passphrase is not None and recipients is None
# Dosyayı şifrele - yeni GPG kütüphaneleri için uyumlu
with open(input_file, 'rb') as f:
content = f.read()
# encrypt_file kullanılabilir mi kontrol et (eski sürüm)
if hasattr(gpg, 'encrypt_file'):
with open(input_file, 'rb') as f:
status = gpg.encrypt_file(
f,
recipients=recipients,
output=output_file,
symmetric=symmetric,
passphrase=passphrase,
always_trust=True
)
else:
# Yeni sürüm için encrypt kullan
status = gpg.encrypt(
content,
recipients=recipients,
symmetric=symmetric,
passphrase=passphrase,
always_trust=True
)
# Başarılıysa dosyaya yaz
if status.ok:
with open(output_file, 'wb') as f:
f.write(status.data)
if status.ok:
logging.info(f"Dosya başarıyla şifrelendi: {output_file}")
return output_file
else:
logging.error(f"Dosya şifreleme hatası: {status.status}")
if hasattr(status, 'stderr'):
logging.error(f"Hata detayı: {status.stderr}")
return None
except Exception as e:
logging.error(f"Şifreleme sırasında hata oluştu: {str(e)}")
return None"""
content = content.replace(original_encrypt, new_encrypt)
# decrypt_file fonksiyonunu güncelle
if "def decrypt_file(" in content:
original_decrypt = """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:
# GPG nesnesini başlat
gpg_home_dir = os.environ.get('GPG_HOME_DIR', os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gpg_keys'))
gpg = gnupg.GPG(gnupghome=gpg_home_dir)
# Çıktı dosyasını belirle
if not output_file:
output_file = input_file.replace('.gpg', '')
if output_file == input_file: # .gpg uzantısı yoksa
output_file = f"{input_file}.decrypted"
# Dosyanın şifresini çöz
with open(input_file, 'rb') as f:
status = gpg.decrypt_file(
f,
output=output_file,
passphrase=passphrase,
always_trust=True
)
if status.ok:
logging.info(f"Dosya şifresi başarıyla çözüldü: {output_file}")
return output_file
else:
logging.error(f"Dosya şifre çözme hatası: {status.status}")
if hasattr(status, 'stderr'):
logging.error(f"Hata detayı: {status.stderr}")
return None
except Exception as e:
logging.error(f"Şifre çözme sırasında hata oluştu: {str(e)}")
return None"""
new_decrypt = """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:
# GPG nesnesini başlat
gpg_home_dir = os.environ.get('GPG_HOME_DIR', os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gpg_keys'))
gpg = gnupg.GPG(homedir=gpg_home_dir)
gpg.ignore_homedir_permissions = True
# Çıktı dosyasını belirle
if not output_file:
output_file = input_file.replace('.gpg', '')
if output_file == input_file: # .gpg uzantısı yoksa
output_file = f"{input_file}.decrypted"
# Dosyanın şifresini çöz - yeni GPG kütüphaneleri için uyumlu
with open(input_file, 'rb') as f:
encrypted_data = f.read()
# decrypt_file kullanılabilir mi kontrol et (eski sürüm)
if hasattr(gpg, 'decrypt_file'):
with open(input_file, 'rb') as f:
status = gpg.decrypt_file(
f,
output=output_file,
passphrase=passphrase,
always_trust=True
)
else:
# Yeni sürüm için decrypt kullan
status = gpg.decrypt(
encrypted_data,
passphrase=passphrase,
always_trust=True
)
# Başarılıysa dosyaya yaz
if status.ok:
with open(output_file, 'wb') as f:
f.write(status.data)
if status.ok:
logging.info(f"Dosya şifresi başarıyla çözüldü: {output_file}")
return output_file
else:
logging.error(f"Dosya şifre çözme hatası: {status.status}")
if hasattr(status, 'stderr'):
logging.error(f"Hata detayı: {status.stderr}")
return None
except Exception as e:
logging.error(f"Şifre çözme sırasında hata oluştu: {str(e)}")
return None"""
content = content.replace(original_decrypt, new_decrypt)
# Değişiklikleri dosyaya yaz
with open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
logger.info(f"Dosya güncellendi: {file_path}")
return True
except Exception as e:
logger.error(f"Dosya güncellenirken hata oluştu: {str(e)}")
# Hata durumunda yedeği geri yükle
if os.path.exists(backup_path):
shutil.copy2(backup_path, file_path)
logger.info(f"Yedek geri yüklendi: {backup_path} -> {file_path}")
return False
def main():
"""Ana fonksiyon"""
logger.info("GPG şifreleme fonksiyonlarını güncelleme başlatılıyor...")
# encryption_utils.py
encryption_utils_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'encryption_utils.py')
if os.path.exists(encryption_utils_path):
logger.info(f"encryption_utils.py güncelleniyor...")
if update_encryption_utils_file(encryption_utils_path):
logger.info("encryption_utils.py başarıyla güncellendi.")
else:
logger.error("encryption_utils.py güncellenemedi!")
# encryption_utils_simplified.py
encryption_utils_simplified_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'encryption_utils_simplified.py')
if os.path.exists(encryption_utils_simplified_path):
logger.info(f"encryption_utils_simplified.py güncelleniyor...")
if update_encryption_utils_file(encryption_utils_simplified_path):
logger.info("encryption_utils_simplified.py başarıyla güncellendi.")
else:
logger.error("encryption_utils_simplified.py güncellenemedi!")
logger.info("GPG şifreleme fonksiyonları güncelleme tamamlandı.")
if __name__ == "__main__":
main()