# ------------------------------------------ Bibliotheken ------------------------------------------
from tkinter import *
import os
# ------------------------------------------ Klassen -----------------------------------------------
class FensterMitCode(object):
def __init__(self):
self.hauptfenster = Tk(className = "einfaches Crypting")
self.message = ""
# Frames:
self.frame1 = Frame(self.hauptfenster)
self.frame2 = Frame(self.hauptfenster)
self.frame3 = Frame(self.hauptfenster)
# Label:
self.labelUeberschrift = Label(self.hauptfenster, text = "Ver-/Entschlüsselung", fg = "black", font = "Arial 30 underline")
self.labelPassword = Label(self.frame1, text = "Passwort", fg ="black", font = "Arial 15 bold")
self.labelPath = Label(self.frame2, text = "Dateipfad", fg = "black", font = "Arial 15 bold")
self.labelAusgabe = Label(self.hauptfenster, text = "", fg = "black", font = "Arial 15 bold")
self.labelPlatzhalter1 = Label(self.hauptfenster, text = "", fg = "black", font = "Arial 15 bold")
self.labelPlatzhalter2 = Label(self.hauptfenster, text = "", fg = "black", font = "Arial 15 bold")
# Button:
self.buttonstring_to_binary = Button(self.frame3, text = "String zu Binär", font = "Arial 15 bold", width = "20", command = self.string_to_binary)
self.buttonbinary_to_string = Button(self.frame3, text = "Binär zu String", font = "Arial 15 bold", width = "20", command = self.binary_to_string)
# Eingabe:
self.entryPassword = Entry(self.frame1, width = "50")
self.entryPath = Entry(self.frame2, width = "50")
# Implementierung:
self.labelUeberschrift.pack()
self.labelPlatzhalter1.pack()
self.labelPassword.pack(side = "left", padx = "5")
self.entryPassword.pack(side = "right", padx = "5")
self.frame1.pack(fill = X)
self.labelPath.pack(side = "left", padx = "5")
self.entryPath.pack(side = "right", padx = "5")
self.frame2.pack(fill = X)
self.labelPlatzhalter2.pack()
self.buttonstring_to_binary.pack(side = "left", padx = "5")
self.buttonbinary_to_string.pack(side = "right", padx = "5")
self.frame3.pack(fill = X)
self.labelAusgabe.pack()
# Fenster wird erstellt:
self.hauptfenster.mainloop()
def vernam_cipher(self, messageData, password):
keyData = self.gen_key(password, len(self.message))
cipherData = self.xor_bytes(messageData, keyData)
return cipherData
def gen_key(self, password, length):
key = password
while len(key) < length:
key += password
keyData = key[:length].encode("utf-8")
return keyData
def xor_bytes(self, firstData, secondData):
output = bytearray()
for (d1, d2) in zip(firstData, secondData):
result = d1 ^ d2
output.append(result)
return output
def save_data(self, data, path):
f = open(path, "w+b")
f.write(data)
f.close()
def save_string(self, string, path):
f = open(path, "wt")
f.write(string)
f.close()
def read_data(self, path):
f = open(path, "r+b", buffering = 0)
data = f.readall()
f.close()
return data
def read_string(self, path):
text = ""
f = open(path, "rt")
line = f.readline()
while line != "":
text += line
line = f.readline()
f.close()
return text
def string_to_binary(self):
path = self.entryPath.get()
if os.path.isfile(path):
newPath = path[:-3] + "bin"
self.message = str(self.read_string(path))
password = self.entryPassword.get()
messageData = self.message.encode("utf-8")
cipherData = self.vernam_cipher(messageData, password)
self.save_data(cipherData, newPath)
self.labelAusgabe["text"] = "Die Datei wurde erfolgreich codiert und unter " + str(newPath) + " gespeichert!"
else:
self.labelAusgabe["text"] = "Die Datei konnte nicht gefunden werden. Bitte überprüfen sie den Pfad."
def binary_to_string(self):
path = self.entryPath.get()
if os.path.isfile(path):
newPath = path[:-3] + "txt"
password = self.entryPassword.get()
cipherData = self.read_data(path)
messageData = self.vernam_cipher(cipherData, password)
self.message = messageData.decode("utf-8")
self.save_string(self.message, newPath)
self.labelAusgabe["text"] = "Die Datei wurde erfolgreich codiert und unter " + str(newPath) + " gespeichert!"
else:
self.labelAusgabe["text"] = "Die Datei konnte nicht gefunden werden. Bitte überprüfen sie den Pfad."
# ------------------------------------------ Programm ----------------------------------------------
hauptfenster = FensterMitCode()