Re: Verschlüsselungsprogramm
Verfasst: Montag 4. November 2019, 20:05
Musik/Töne abspielen gehört nicht in Ver- und Entschlüsselungsfunktionen. 
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
import os
import tkinter as tk
from tkinter import ttk
from fernet import FernetStream
import pygame.mixer
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
SETTINGS = {
"TNotebook.Tab": {
"configure": {
"padding": [5, 1],
"background": "white",
},
"map": {
"background": [
("selected", "white"),
("active", "#bdbdbd"),
],
},
}
}
def generiere_schlüssel(passwort, salt=None):
passwort = passwort.encode()
if not salt:
salt = os.urandom(16)
kdf = PBKDF2HMAC(algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=1000000,
backend=default_backend()
)
schlüssel = base64.urlsafe_b64encode(kdf.derive(passwort))
return schlüssel, salt
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())
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)
fernet = FernetStream(schlüssel)
decryptor = fernet.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 init_styles():
style = ttk.Style()
style.theme_create("alles_weiss", parent="alt", settings=SETTINGS)
style.theme_use("alles_weiss")
style.configure("TNotebook", background="white")
style.configure("TFrame", background="white")
class TabDecrypt(ttk.Frame):
def __init__(self, master):
super().__init__(master)
tk.Label(self, text="Wichtig: Die Datei wird mit einer zusätzlichen\n Dateiendung gespeichert. Nicht überschrieben!\n", bg="white"
).grid(row=0, columnspan=1, sticky=tk.W)
tk.Label(self, text="Bitte Dateipfad angeben", bg="white"
).grid(row=1, column=0, sticky=tk.W)
self.dateipfad = tk.Entry(self, bg="white")
self.dateipfad.grid(row=1, column=1, sticky=tk.W)
tk.Label(self, text="Bitte Passwort eingeben", bg="white"
).grid(row=2, column=0, sticky=tk.W)
self.passwort = tk.Entry(self, bg="white")
self.passwort.grid(row=2, column=1, sticky=tk.W)
tk.Button(self, text="entschlüsseln", command=self.decrypt, bg="white"
).grid(row=4, columnspan=1, sticky=tk.W)
def decrypt(self):
entschlüsseln(self.passwort.get(), self.dateipfad.get())
pygame.mixer.music.play()
class TabEncrypt(ttk.Frame):
def __init__(self, master):
super().__init__(master)
tk.Label(master, text="Wichtig: Die Datei wird mit einer zusätzlichen\n Dateiendung gespeichert. Nicht überschrieben!\n", bg="white"
).grid(row=0, columnspan=1, sticky=tk.W)
tk.Label(master, text="Bitte Dateipfad angeben", bg="white"
).grid(row=1, column=0, sticky=tk.W)
self.dateipfad = tk.Entry(master, bg="white")
self.dateipfad.grid(row=1, column=1, sticky=tk.W)
tk.Label(master, text="Bitte Passwort eingeben", bg="white"
).grid(row=2, column=0, sticky=tk.W)
self.passwort = tk.Entry(master, bg="white")
self.passwort.grid(row=2, column=1, sticky=tk.W)
tk.Button(master, text="verschlüsseln", command=self.encrypt, bg="white"
).grid(row=4, columnspan=1, sticky=tk.W)
def encrypt(self):
verschlüsseln(self.passwort.get(), self.dateipfad.get())
pygame.mixer.music.play()
def main():
pygame.mixer.init()
pygame.mixer.music.load("audio.mp3")
init_styles()
root = tk.Tk()
root.title("Dateien ent/verschlüsseln")
root.config(bg="white")
root_tab = ttk.Notebook(root)
tab_decrypt = TabDecrypt(root_tab)
tab_encrypt = TabEncrypt(root_tab)
root_tab.add(tab_decrypt, text="Entschlüsseln")
root_tab.add(tab_encrypt, text="Verschlüsseln")
root_tab.pack(expand=1, fill='both')
root.mainloop()
if __name__ == "__main__":
main()
Code: Alles auswählen
import os
import tkinter as tk
from tkinter import ttk
from fernet import FernetStream
import pygame.mixer
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
SETTINGS = {
"TNotebook.Tab": {
"configure": {
"padding": [5, 1],
"background": "white",
},
"map": {
"background": [
("selected", "white"),
("active", "#bdbdbd"),
],
},
}
}
def generiere_schlüssel(passwort, salt=None):
passwort = passwort.encode()
if not salt:
salt = os.urandom(16)
kdf = PBKDF2HMAC(algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=1000000,
backend=default_backend()
)
schlüssel = base64.urlsafe_b64encode(kdf.derive(passwort))
return schlüssel, salt
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())
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)
fernet = FernetStream(schlüssel)
decryptor = fernet.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 init_styles(root):
style = ttk.Style(root)
style.theme_create("alles_weiss", parent="alt", settings=SETTINGS)
style.theme_use("alles_weiss")
style.configure("TNotebook", background="white")
style.configure("TFrame", background="white")
class TabDecrypt(ttk.Frame):
def __init__(self, master):
super().__init__(master)
tk.Label(self, text="Wichtig: Die Datei wird mit einer zusätzlichen\n Dateiendung gespeichert. Nicht überschrieben!\n", bg="white"
).grid(row=0, columnspan=1, sticky=tk.W)
tk.Label(self, text="Bitte Dateipfad angeben", bg="white"
).grid(row=1, column=0, sticky=tk.W)
self.dateipfad = tk.Entry(self, bg="white")
self.dateipfad.grid(row=1, column=1, sticky=tk.W)
tk.Label(self, text="Bitte Passwort eingeben", bg="white"
).grid(row=2, column=0, sticky=tk.W)
self.passwort = tk.Entry(self, bg="white")
self.passwort.grid(row=2, column=1, sticky=tk.W)
tk.Button(self, text="entschlüsseln", command=self.decrypt, bg="white"
).grid(row=4, columnspan=1, sticky=tk.W)
def decrypt(self):
entschlüsseln(self.passwort.get(), self.dateipfad.get())
pygame.mixer.music.play()
class TabEncrypt(ttk.Frame):
def __init__(self, master):
super().__init__(master)
tk.Label(self, text="Wichtig: Die Datei wird mit einer zusätzlichen\n Dateiendung gespeichert. Nicht überschrieben!\n", bg="white"
).grid(row=0, columnspan=1, sticky=tk.W)
tk.Label(self, text="Bitte Dateipfad angeben", bg="white"
).grid(row=1, column=0, sticky=tk.W)
self.dateipfad = tk.Entry(self, bg="white")
self.dateipfad.grid(row=1, column=1, sticky=tk.W)
tk.Label(self, text="Bitte Passwort eingeben", bg="white"
).grid(row=2, column=0, sticky=tk.W)
self.passwort = tk.Entry(self, bg="white")
self.passwort.grid(row=2, column=1, sticky=tk.W)
tk.Button(self, text="verschlüsseln", command=self.encrypt, bg="white"
).grid(row=4, columnspan=1, sticky=tk.W)
def encrypt(self):
verschlüsseln(self.passwort.get(), self.dateipfad.get())
pygame.mixer.music.play()
def main():
pygame.mixer.init()
pygame.mixer.music.load("audio.mp3")
root = tk.Tk()
init_styles(root)
root.title("Dateien ent/verschlüsseln")
root.config(bg="white")
root_tab = ttk.Notebook(root)
tab_decrypt = TabDecrypt(root_tab)
tab_encrypt = TabEncrypt(root_tab)
root_tab.add(tab_decrypt, text="Entschlüsseln")
root_tab.add(tab_encrypt, text="Verschlüsseln")
root_tab.pack(expand=1, fill='both')
root.mainloop()
if __name__ == "__main__":
main()
Das ist eine DER Standardfragen hier, zu denen die dir ja inzwischen bekannten Forumsgroessen auch schon oft was geschrieben haben. Gelegentlich auch mal mit Code. Da findest du was, ganz bestimmt.Fire Spike hat geschrieben: Dienstag 5. November 2019, 07:25 könntest du mir ein link zu einem guten beispiel für tk mit threads posten? mir läuft nur Müll über den Weg.
Code: Alles auswählen
import os
import base64
import tkinter as tk
import pygame.mixer
from tkinter import ttk
from fernet import FernetStream
from multiprocessing import Process, Queue
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
SETTINGS = {
"TNotebook.Tab": {
"configure": {
"padding": [5, 1],
"background": "white",
},
"map": {
"background": [
("selected", "white"),
("active", "#bdbdbd"),
],
},
}
}
def generiere_schlüssel(passwort, salt=None):
passwort = passwort.encode()
if not salt:
salt = os.urandom(16)
kdf = PBKDF2HMAC(algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=1000000,
backend=default_backend()
)
schlüssel = base64.urlsafe_b64encode(kdf.derive(passwort))
return schlüssel, salt
def verschlüsseln(queue, passwort, dateipfad):
try:
schlüssel, salt = generiere_schlüssel(passwort)
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())
queue.put(True)
except Exception as fehler:
queue.put(fehler)
def entschlüsseln(queue, passwort, dateipfad):
try:
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)
fernet = FernetStream(schlüssel)
decryptor = fernet.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())
queue.put(True)
except Exception as fehler:
queue.put(fehler)
def init_styles(root):
style = ttk.Style(root)
style.theme_create("alles_weiss", parent="alt", settings=SETTINGS)
style.theme_use("alles_weiss")
style.configure("TNotebook", background="white")
style.configure("TFrame", background="white")
class TabDecrypt(ttk.Frame):
def __init__(self, master):
super().__init__(master)
tk.Label(self, text="Wichtig: Die Datei wird mit einer zusätzlichen\n Dateiendung gespeichert. Nicht überschrieben!\n", bg="white"
).grid(row=0, columnspan=1, sticky=tk.W)
tk.Label(self, text="Bitte Dateipfad angeben", bg="white"
).grid(row=1, column=0, sticky=tk.W)
self.dateipfad = tk.Entry(self, bg="white")
self.dateipfad.grid(row=1, column=1, sticky=tk.W)
tk.Label(self, text="Bitte Passwort eingeben", bg="white"
).grid(row=2, column=0, sticky=tk.W)
self.passwort = tk.Entry(self, bg="white")
self.passwort.grid(row=2, column=1, sticky=tk.W)
tk.Button(self, text="entschlüsseln", command=self.decrypt, bg="white"
).grid(row=4, columnspan=1, sticky=tk.W)
def decrypt(self):
entschlüsseln(self.passwort.get(), self.dateipfad.get())
# pygame.mixer.music.play()
class TabEncrypt(ttk.Frame):
def __init__(self, master):
super().__init__(master)
tk.Label(self, text="Wichtig: Die Datei wird mit einer zusätzlichen\n Dateiendung gespeichert. Nicht überschrieben!\n", bg="white"
).grid(row=0, columnspan=1, sticky=tk.W)
tk.Label(self, text="Bitte Dateipfad angeben", bg="white"
).grid(row=1, column=0, sticky=tk.W)
self.dateipfad = tk.Entry(self, bg="white")
self.dateipfad.grid(row=1, column=1, sticky=tk.W)
tk.Label(self, text="Bitte Passwort eingeben", bg="white"
).grid(row=2, column=0, sticky=tk.W)
self.passwort = tk.Entry(self, bg="white")
self.passwort.grid(row=2, column=1, sticky=tk.W)
self.button = tk.Button(self, text="verschlüsseln", command=self.encrypt, bg="white")
self.button.grid(row=4, columnspan=1, sticky=tk.W)
self.status = tk.Label(self, text="", bg="white")
self.status.grid(row=5, column=0, sticky=tk.W)
def prozess_überwacher(self):
queue_werte = self.queue.get()
if queue_werte or type(queue_werte) == 'str' and len(queue_werte) >= 0:
self.after_cancel(self.AFTER)
self.button["state"] = tk.NORMAL
self.status.config(text=queue_werte)
def encrypt(self):
# verschlüsseln(self.passwort.get(), self.dateipfad.get())
# pygame.mixer.music.play()
self.queue = Queue()
prozess = Process(target=verschlüsseln, args=(self.queue, self.passwort.get(), self.dateipfad.get()))
prozess.start()
self.status.config(text="wird verschlüsselt...")
self.button["state"] = tk.DISABLED
self.AFTER = self.after(100, self.prozess_überwacher())
def main():
pygame.mixer.init()
pygame.mixer.music.load("audio.mp3")
root = tk.Tk()
init_styles(root)
root.title("Dateien ent/verschlüsseln")
root.config(bg="white")
root_tab = ttk.Notebook(root)
tab_decrypt = TabDecrypt(root_tab)
tab_encrypt = TabEncrypt(root_tab)
root_tab.add(tab_decrypt, text="Entschlüsseln")
root_tab.add(tab_encrypt, text="Verschlüsseln")
root_tab.pack(expand=1, fill='both')
root.mainloop()
if __name__ == "__main__":
main()
Code: Alles auswählen
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "/media/usb/.Projekte/Python3/tkinter/Dateiverschluesseln2.py", line 145, in encrypt
self.AFTER = self.after(100, prozess_überwacher(self))
File "/media/usb/.Projekte/Python3/tkinter/Dateiverschluesseln2.py", line 87, in prozess_überwacher
root.after_cancel(root.AFTER)
AttributeError: 'TabEncrypt' object has no attribute 'AFTER'
Code: Alles auswählen
Wenn einmal die Funktion von `after` durchgelaufen war, muß sie wieder mit `after` angestoßen werden. Das `after_cancel` ist also genau die falsche Aktion.