# lokale Verschlüsselung von Dateien eines Verzeichnisses, die jünger sind, # als der in zeitstempel.txt hinterlegte Zeitpunkt der letzten Sicherung. # Das Hochladen der verschlüsselten Dateien zum Webspace erfolgt mit FTPS # ========================================================= import os, shutil, datetime #, base64 from cryptography.fernet import Fernet from pathlib import Path from ftplib import FTP_TLS quelle = r"D:/geheim/" ziel = r"D:/geheim/aes/" b64key = b'SGFucs05Y2stUNobGVpewmytU3RyTMftOTUwgjhIb2Y=' # aus Passwort generierter b64key fkey=Fernet(b64key) # für lokale Verschlüsselung mit Fernet-Key ftps_server = "???????" ftp_user = "????????" ftp_pw = "????????" ftps_quelle = r"D:\geheim\aes\\" # lokal ftps_ziel = r"/aes" # Ziel-Verz auf FTP server ############################################################### #----- alten Zeitstempel lesen --------------------- datei = open('zeitstempel.txt','r') letztes = datei.read() print("alter Zeitstempel: ",letztes) letztez = datetime.datetime.strptime(letztes, "%Y-%m-%d %H:%M:%S") datei.close() stempel_jetzt = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") #------ nur Dateien verschlüsseln, die jünger als der alte Zeitstempel sind ------- i = 0 for datei in os.scandir(quelle): if datei.is_file(): timestamp = datetime.datetime.fromtimestamp(os.path.getmtime(datei)) if (timestamp > letztez): print(datei.name, timestamp.strftime("%Y-%m-%d %H:%M:%S")) i = i + 1 #---------- Datei verschlüsseln with open(datei, "rb") as file: file_data = file.read() encrypted_data = fkey.encrypt(file_data) enc_file_path = quelle + datei.name + ".aes" with open(enc_file_path, "wb") as file: file.write(encrypted_data) #--------- nur die aes-Dateien verschieben ------------ if i > 0: #--- vorher alte aes-Dateien in ziel löschen get_files = os.listdir(ziel) for f in get_files: if f[-4:] == ".aes": os.remove(ziel + f) get_files = os.listdir(quelle) for f in get_files: #--- aes-Datei von quelle zu ziel-Verzeichnis verschieben if f[-4:] == ".aes": shutil.move(quelle + f, ziel) #--------- aes-Dateien auf Website hochladen ---------------------------------------------- try: ftps = FTP_TLS(ftps_server) ftps.login(ftp_user, ftp_pw) ftps.prot_p() # Übertragung komplett verschlüsseln get_files = os.listdir(ftps_quelle) for f in get_files: File2Send = ftps_quelle + f file = open(File2Send, "rb") # Open the file in binary mode ftps.cwd(ftps_ziel) # Navigate to the desired directory ftps.storbinary('STOR ' + File2Send.split("\\")[-1], file) # Upload the file print(f, "- Upload erfolgreich!") print("FTP Send komplett") ftps.quit() # Close the connection file.close() #----- ggf. neuen Zeitstempel schreiben --------------------- datei = open('zeitstempel.txt','w') datei.write(str(stempel_jetzt)) print("neuer Zeitstempel:",stempel_jetzt) datei.close() except: print(f, "FTP Fehler - kein Internet?") if i = 0: print("keine neue/geänderte Datei gefunden") else: print(stempel_jetzt, "fertig, " , i , "Dateien verschluesselt und übertragen")