release 1.10
This commit is contained in:
@@ -14,7 +14,7 @@ import webbrowser # für website in Infofenster
|
||||
import binascii # für base64_ascii
|
||||
|
||||
#######################################
|
||||
versionsnummer = "Version: 1.01 (21. Juni 2023)"
|
||||
versionsnummer = "Version: 1.10 (17. März 2024)"
|
||||
website = "http://mysteryhelfer.tba-tm.bplaced.net"
|
||||
#######################################
|
||||
|
||||
@@ -4319,10 +4319,10 @@ def rail_encrypt(plain_text: str, rails: int):
|
||||
for b in plain_text:
|
||||
arr[r][z] = b
|
||||
z += 1
|
||||
if r+1 == rails and plus:
|
||||
if r + 1 == rails and plus:
|
||||
plus = False
|
||||
r -= 1
|
||||
elif r-1 < 0 and not plus:
|
||||
elif r - 1 < 0 and not plus:
|
||||
plus = True
|
||||
r += 1
|
||||
elif plus:
|
||||
@@ -4344,8 +4344,17 @@ def jaegerzaun_encrypt():
|
||||
pw = pw.strip()
|
||||
if eingabetext == "":
|
||||
Ausgabe.insert(1.0, """HILFE: [encrypt Jägerzaun]
|
||||
Jägerzaun (auch Railfence oder ZigZag-Chiffre genannt)
|
||||
|
||||
Jägerzaun (auch Railfence oder ZigZag-Chiffre genannt)
|
||||
Bei dieser Chiffre wird kodiert, indem man einen Text im Zickzackmuster
|
||||
in ein Feld aus z.B. 3 Zeilen und so vielen Spalten wie der Text lang ist
|
||||
schreibt. Man beginnt in Spalte 1 - Zeile 1, dann geht es in Spalte 2 - Zeile 1
|
||||
weiter danach Spalte 3 - Zeile 3, dann Spalte 4 - Zeile 2, Spalte 5 - Zeile 1 usw.
|
||||
Danach werden die Buchstaben einfach Zeile für Zeile hintereinander geschrieben.
|
||||
Unterschiedliche Varianten entstehen einfach dadurch, dass man mit unterschiedlich
|
||||
vielen Zeilen arbeitet welche im Schlüsselfeld anzugeben ist.
|
||||
|
||||
Die Funktion erzeugt hierbei einmal eine Ausgabe bei welcher auch Leerzeichen
|
||||
mitgeschrieben werden und eine Ausgabe wo zuvor die Leerzeichen entfernt werden.
|
||||
""" + "\n\n")
|
||||
elif pw == "" or not pw.isdigit():
|
||||
Ausgabe.insert(1.0, "Bitte eine Zahl im Schlüsselfeld eingeben!!\n", "re")
|
||||
@@ -4361,6 +4370,86 @@ def jaegerzaun_encrypt():
|
||||
Ausgabe.insert(1.0, "Schlüsselzahl fehlerhaft oder kleiner als 2.\n", "re")
|
||||
|
||||
|
||||
def rail_decrypt(cipher: str, rails: int):
|
||||
arr = [["_" for _ in range(len(cipher))] for _ in range(rails)]
|
||||
# cipher ins array reinbasteln
|
||||
x, y = 0, 0
|
||||
first_x = True
|
||||
for b in cipher:
|
||||
if x >= len(cipher) and y < rails:
|
||||
y += 1
|
||||
x = y
|
||||
first_x = True
|
||||
arr[y][x] = b
|
||||
if y == 0 or (first_x and y != rails - 1):
|
||||
x = x + (rails - y - 1) * 2
|
||||
first_x = False
|
||||
elif y == rails - 1 or first_x is False:
|
||||
x = x + (y * 2)
|
||||
first_x = True
|
||||
# dekodierten Text aus array holen
|
||||
out = ""
|
||||
x, y = 0, 0
|
||||
down = True
|
||||
for i in range(len(cipher)):
|
||||
out += arr[y][x]
|
||||
x += 1
|
||||
if down and y + 1 == rails:
|
||||
down = False
|
||||
y -= 1
|
||||
elif down:
|
||||
y += 1
|
||||
elif down is False and y == 0:
|
||||
down = True
|
||||
y += 1
|
||||
elif down is False:
|
||||
y -= 1
|
||||
return out
|
||||
|
||||
|
||||
def jaegerzaun_decrypt():
|
||||
trennlinie()
|
||||
eingabetext = Eingabe.get(1.0, END)
|
||||
eingabetext = eingabetext.strip().replace("\n", " ")
|
||||
pw = PW_Eingabe.get()
|
||||
pw = pw.strip()
|
||||
if eingabetext == "":
|
||||
Ausgabe.insert(1.0, """HILFE: [decrypt Jägerzaun]
|
||||
Jägerzaun (auch Railfence oder ZigZag-Chiffre genannt)
|
||||
Bei dieser Chiffre wird kodiert, indem man einen Text im Zickzackmuster
|
||||
in ein Feld aus z.B. 3 Zeilen und so vielen Spalten wie der Text lang ist
|
||||
schreibt. Man beginnt in Spalte 1 - Zeile 1, dann geht es in Spalte 2 - Zeile 1
|
||||
weiter danach Spalte 3 - Zeile 3, dann Spalte 4 - Zeile 2, Spalte 5 - Zeile 1 usw.
|
||||
Danach werden die Buchstaben einfach Zeile für Zeile hintereinander geschrieben.
|
||||
Unterschiedliche Varianten entstehen einfach dadurch, dass man mit unterschiedlich
|
||||
vielen Zeilen arbeitet welche im Schlüsselfeld angegeben werden kann.
|
||||
|
||||
Die Funktion erzeugt hierbei einmal eine Ausgabe bei welcher auch Leerzeichen
|
||||
mitgeschrieben werden und eine Ausgabe wo zuvor die Leerzeichen entfernt werden.
|
||||
|
||||
Wird im Schlüsselfeld keine Zahl angegeben erfolgt automatisch die Dekodierung
|
||||
für alle Zeilenanzahlen von 2-12.""" + "\n\n")
|
||||
elif pw == "":
|
||||
for i in range(12, 1, -1):
|
||||
Ausgabe.insert(1.0, f'{i:02} - {rail_decrypt(eingabetext.replace(" ", ""), i)}\n')
|
||||
Ausgabe.insert(1.0, "ohne Leerzeichen\n", "bu")
|
||||
for i in range(12, 1, -1):
|
||||
Ausgabe.insert(1.0, f'{i:02} - {rail_decrypt(eingabetext, i)}\n')
|
||||
Ausgabe.insert(1.0, "inkl. Leerzeichen\n", "bu")
|
||||
elif not pw.isdigit():
|
||||
Ausgabe.insert(1.0, "Bitte eine Zahl im Schlüsselfeld eingeben!!\n", "re")
|
||||
else:
|
||||
try:
|
||||
if int(pw) < 2:
|
||||
raise ValueError("Zahl zu klein")
|
||||
Ausgabe.insert(1.0, rail_decrypt(eingabetext.replace(" ", ""), int(pw)) + "\n")
|
||||
Ausgabe.insert(1.0, "ohne Leerzeichen\n", "bu")
|
||||
Ausgabe.insert(1.0, rail_decrypt(eingabetext, int(pw)) + "\n")
|
||||
Ausgabe.insert(1.0, "inkl. Leerzeichen\n", "bu")
|
||||
except ValueError:
|
||||
Ausgabe.insert(1.0, "Schlüsselzahl fehlerhaft oder kleiner als 2.\n", "re")
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------------------
|
||||
def knoeppe_aendern2():
|
||||
B44.config(text="Button88", command="", bg=bgcolor_default, cursor="")
|
||||
@@ -4410,7 +4499,8 @@ def knoeppe_aendern1():
|
||||
B55.config(text="Base64<->ASCII", command=base64_ascii, bg="#7777ff", cursor='question_arrow', font=schrift)
|
||||
B56.config(text="Jägerzaun kodieren", command=jaegerzaun_encrypt, bg="#3388aa", cursor='question_arrow',
|
||||
font=schrift)
|
||||
B57.config(text="Button79", command="", bg=bgcolor_default, cursor="")
|
||||
B57.config(text="Jägerzaun dekodieren", command=jaegerzaun_decrypt, bg="#3388aa", cursor='question_arrow',
|
||||
font=schrift)
|
||||
B58.config(text="Button80", command="", bg=bgcolor_default, cursor="")
|
||||
B59.config(text="Button81", command="", bg=bgcolor_default, cursor="")
|
||||
B60.config(text="Button82", command="", bg=bgcolor_default, cursor="")
|
||||
|
||||
Reference in New Issue
Block a user