Re: Verschlüsselungsprogramm
Verfasst: Donnerstag 31. Oktober 2019, 21:03
@Fire Spike: Das *tatsächlich* Byte für Byte zu machen ist ziemlich bekloppt.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
def verschlüsseln(passwort, dateipfad):
with open(dateipfad, "rb") as datei:
with open(dateipfad + ".verschluesselt", "ab") as datei_verschlüsselt:
schlüssel, salt = generiere_Schlüssel(passwort)
f = Fernet.FernetStream(schlüssel)
encryptor = f.encryptor()
datei_verschlüsselt.write(salt)
anzahl_blöcke, rest = divmod(os.path.getsize(dateipfad), __BLOCK_GRÖSSE)
for i in range(anzahl_blöcke):
block = datei.read(__BLOCK_GRÖSSE)
datei_verschlüsselt.write(encryptor.update(block))
datei_verschlüsselt.write(encryptor.update(datei.read(rest)) + encryptor.finalize())
Code: Alles auswählen
def verschlüsseln(passwort, dateipfad):
schlüssel, salt = generiere_Schlüssel(passwort)
fernet = Fernet.FernetStream(schlüssel)
encryptor = fernet.encryptor()
with open(dateipfad, "rb") as datei:
with open(dateipfad + ".verschluesselt", "wb") as datei_verschlüsselt:
datei_verschlüsselt.write(salt)
while True:
block = datei.read(BLOCK_GRÖSSE)
if not block:
break
datei_verschlüsselt.write(encryptor.update(block))
datei_verschlüsselt.write(encryptor.finalize())
Code: Alles auswählen
import base64
import os
import tkinter as tk
import Fernet
import pygame.mixer
from tkinter import ttk
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
BLOCK_GRÖSSE = 4096
def generiere_Schlüssel(passwort, salt=False):
passwort = passwort.encode()
return_tuple = False
if not salt:
salt = os.urandom(16)
return_tuple = True
kdf = PBKDF2HMAC(algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=1000000,
backend=default_backend()
)
schlüssel = base64.urlsafe_b64encode(kdf.derive(passwort))
if return_tuple:
return schlüssel, salt
else:
return schlüssel
def verschlüsseln(passwort, dateipfad):
schlüssel, salt = generiere_Schlüssel(passwort)
fernet = Fernet.FernetStream(schlüssel)
encryptor = fernet.encryptor()
with open(dateipfad, "rb") as datei:
with open(dateipfad + ".verschluesselt", "wb") as datei_verschlüsselt:
datei_verschlüsselt.write(salt)
while True:
block = datei.read(BLOCK_GRÖSSE)
if not block:
break
datei_verschlüsselt.write(encryptor.update(block))
datei_verschlüsselt.write(encryptor.finalize())
pygame.mixer.music.play()
def entschlüsseln(passwort, dateipfad):
dateiname, _ = os.path.splitext(os.path.basename(dateipfad))
with open(dateipfad, "rb") as datei:
with open(os.path.join(os.path.dirname(dateipfad), dateiname + ".entschluesselt"), "wb") as datei_entschlüsselt:
salt = datei.read(16)
schlüssel = generiere_Schlüssel(passwort, salt)
f = Fernet.FernetStream(schlüssel)
decryptor = f.decryptor()
while True:
block = datei.read(BLOCK_GRÖSSE)
if not block:
break
datei_entschlüsselt.write(decryptor.update(block))
datei_entschlüsselt.write(decryptor.finalize())
pygame.mixer.music.play()
def GUI():
root = tk.Tk()
root.title("Dateien ent/verschlüsseln")
root.config(bg="white")
style = ttk.Style()
settings = {"TNotebook.Tab": {"configure": {"padding": [5, 1],
"background": "white"
},
"map": {"background": [("selected", "white"),
("active", "#bdbdbd")],
}
}
}
style.theme_create("alles_weiss", parent="alt", settings=settings)
style.theme_use("alles_weiss")
style.configure("TNotebook", background="white")
style.configure("TFrame", background="white")
root_tab = ttk.Notebook(root)
tab1 = ttk.Frame(root_tab)
tab2 = ttk.Frame(root_tab)
root_tab.add (tab1, text="Entschlüsseln")
root_tab.add (tab2, text="Verschlüsseln")
root_tab.pack(expand=1, fill='both')
info1 = tk.Label(tab1, text="Wichtig: Die Datei wird mit einer zusätzlichen\n Dateiendung gespeichert. Nicht überschrieben!\n", bg="white")
dateipfad_text1 = tk.Label(tab1, text="Bitte Dateipfad angeben", bg="white")
dateipfad_eingabe1 = tk.Entry(tab1, bg="white")
passwort_text1 = tk.Label(tab1, text="Bitte Passwort eingeben", bg="white")
passwort_eingabe1 = tk.Entry(tab1, bg="white")
entschlüsseln_button = tk.Button(tab1, text="entschlüsseln", command=lambda: entschlüsseln(passwort_eingabe1.get(), dateipfad_eingabe1.get()), bg="white")
verschlüsseln_button = tk.Button(tab2, text="verschlüsseln", command=lambda: verschlüsseln(passwort_eingabe2.get(), dateipfad_eingabe2.get()), bg="white")
info2 = tk.Label(tab2, text="Wichtig: Die Datei wird mit einer zusätzlichen\n Dateiendung gespeichert. Nicht überschrieben!\n", bg="white")
dateipfad_text2 = tk.Label(tab2, text="Bitte Dateipfad angeben", bg="white")
dateipfad_eingabe2 = tk.Entry(tab2, bg="white")
passwort_text2 = tk.Label(tab2, text="Bitte Passwort eingeben", bg="white")
passwort_eingabe2 = tk.Entry(tab2, bg="white")
info1.grid(row=0, columnspan=1, sticky=tk.W)
dateipfad_text1.grid(row=1, column=0, sticky=tk.W)
dateipfad_eingabe1.grid(row=1, column=1, sticky=tk.W)
passwort_text1.grid(row=2, column=0, sticky=tk.W)
passwort_eingabe1.grid(row=2, column=1, sticky=tk.W)
info2.grid(row=0, columnspan=1, sticky=tk.W)
dateipfad_text2.grid(row=1, column=0, sticky=tk.W)
dateipfad_eingabe2.grid(row=1, column=1, sticky=tk.W)
passwort_text2.grid(row=2, column=0, sticky=tk.W)
passwort_eingabe2.grid(row=2, column=1, sticky=tk.W)
entschlüsseln_button.grid(row=4, columnspan=1, sticky=tk.W)
verschlüsseln_button.grid(row=4, columnspan=1, sticky=tk.W)
root.mainloop()
if __name__ == "__main__":
pygame.mixer.init()
pygame.mixer.music.load("audio.mp3")
GUI()