Einzelfunktionenexperimentierverzeichnis in git integriert

This commit is contained in:
2024-03-17 11:13:48 +01:00
parent 99bd1032c2
commit be9e204576
20 changed files with 1025 additions and 1 deletions

View File

@@ -2,7 +2,6 @@
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/experimentierbereich" />
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />

1
.idea/encodings.xml generated
View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/HTML/impressum.html" charset="windows-1252" />
<file url="file://$PROJECT_DIR$/Versionsgeschichte.txt" charset="windows-1252" />
</component>
</project>

View File

@@ -0,0 +1,69 @@
#!/usr/bin/env python3
# -*- coding: utf8 -*-
# PW1 WIKIPEDIA
# PW2 BEOBACHTUNGSLISTE
# ausgabe_az09 FAFGA DDAFD DVAFA DGGXA VAGDG GDGDF ADFAF FAAVG ADAVG XAAVF FAVDA GAGGG GVVAD GFADF DAFDD DFDGA GAFGV DGAVF FDDGG DGXFV DDDVA DFVFF DGGGV FXDVG GGGFV D
# ausgabe_90za VAVGA DDAVD XVAVA DGVDA VAGDG GXGDV AXVAV VAAVG AXAFG DAAFV FAVXA GAGGG GFFAD GVAXV XAVXX XVXGA GAVGV XGAVV VDXGG DGDVV XXXVA DVVVV XGGGF VDXVG GGGVF X
# text="FAFGA DDAFD DVAFA DGGXA VAGDG GDGDF ADFAF FAAVG ADAVG XAAVF FAVDA GAGGG GVVAD GFADF DAFDD DFDGA GAFGV DGAVF FDDGG DGXFV DDDVA DFVFF DGGGV FXDVG GGGFV D"
text = "VAVGA DDAVD XVAVA DGVDA VAGDG GXGDV AXVAV VAAVG AXAFG DAAFV FAVXA GAGGG GFFAD GVAXV XAVXX XVXGA GAVGV XGAVV VDXGG DGDVV XXXVA DVVVV XGGGF VDXVG GGGVF X"
PW = "wikipedia, beobachtungsliste"
# PW auf Komma prüfen!!!
RN = ["AA", "AD", "AF", "AG", "AV", "AX", "DA", "DD", "DF", "DG", "DV", "DX", "FA", "FD", "FF", "FG", "FV", "FX", "GA",
"GD", "GF", "GG", "GV", "GX", "VA", "VD", "VF", "VG", "VV", "VX", "XA", "XD", "XF", "XG", "XV", "XX"]
alpha_az09 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
alpha_90za = "9876543210ZYXWVUTSRQPONMLKJIHGFEDCBA"
text = text.upper()
PW = PW.upper()
PW = PW.split(",")
PW1az09 = ""
for b in PW[0]+alpha_az09:
if b in alpha_az09 and b not in PW1az09:
PW1az09 += b
PW190za = ""
for b in PW[0]+alpha_90za:
if b in alpha_90za and b not in PW190za:
PW190za += b
PW2 = ""
for i in PW[1]:
if i in alpha_az09:
PW2 += i
ctext = ""
for i in text:
if i in alpha_az09:
ctext += i
WBaz09 = {}
for i in range(36):
WBaz09[RN[i]] = PW1az09[i]
WB90za = {}
for i in range(36):
WB90za[RN[i]] = PW190za[i]
ret = ['_']*len(ctext)
lt, lp = len(ctext), len(PW2)
t1 = [(PW2[i], i) for i in range(len(PW2))]
ind = [q[1] for q in sorted(t1)]
upto = 0
for i in range(len(PW2)):
tic = int(lt / lp)
if ind[i] < lt % lp:
tic += 1
ret[ind[i]::lp] = ctext[upto:upto+tic]
upto += tic
ctext = ''.join(ret)
klartext_az09 = ""
for i in range(0, len(ctext), 2):
bi = ctext[i:i+2]
if bi in WBaz09:
klartext_az09 += WBaz09[bi]
klartext_90za = ""
for i in range(0, len(ctext), 2):
bi = ctext[i:i+2]
if bi in WB90za:
klartext_90za += WB90za[bi]
print("PW1", PW[0])
print("PW2", PW2)
print("klartext_az", klartext_az09)
print("klartext_za", klartext_90za)

View File

@@ -0,0 +1,80 @@
#!/usr/bin/env python3
# -*- coding: utf8 -*-
# fertig
text = "Munitionierung beschleunigen Punkt Soweit nicht eingesehen auch bei Tag"
PW = "wikipedia, beobachtungsliste"
# PW auf Komma prüfen!!!
RN = ["AA", "AD", "AF", "AG", "AV", "AX", "DA", "DD", "DF", "DG", "DV", "DX", "FA", "FD", "FF", "FG", "FV", "FX", "GA",
"GD", "GF", "GG", "GV", "GX", "VA", "VD", "VF", "VG", "VV", "VX", "XA", "XD", "XF", "XG", "XV", "XX"]
alpha_az09 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
alpha_90za = "9876543210ZYXWVUTSRQPONMLKJIHGFEDCBA"
text = text.upper()
PW = PW.upper()
PW = PW.split(",")
PW1az09 = ""
for b in PW[0] + alpha_az09:
if b in alpha_az09 and b not in PW1az09:
PW1az09 += b
PW190za = ""
for b in PW[0] + alpha_90za:
if b in alpha_90za and b not in PW190za:
PW190za += b
PW2 = ""
for i in PW[1]:
if i in alpha_az09:
PW2 += i
klartext = ""
for i in text:
if i in alpha_az09:
klartext += i
WBaz09 = {}
for i in range(36):
WBaz09[PW1az09[i]] = RN[i]
WB90za = {}
for i in range(36):
WB90za[PW190za[i]] = RN[i]
ctext1az09 = ""
for b in klartext:
ctext1az09 += WBaz09[b]
ctext190za = ""
for b in klartext:
ctext190za += WB90za[b]
ctext2az09 = []
for i in range(len(PW2)):
ctext2az09.append([PW2[i] + str(i + 10)])
for i in range(len(ctext1az09)):
ctext2az09[i % len(PW2)].append(ctext1az09[i])
ctext2az09.sort()
ausgabe_az09 = ""
z = 1
for i in ctext2az09:
for j in range(len(i) - 1):
if z == 5:
ausgabe_az09 += i[j + 1] + " "
z = 1
else:
ausgabe_az09 += i[j + 1]
z += 1
ctext290za = []
for i in range(len(PW2)):
ctext290za.append([PW2[i] + str(i + 10)])
for i in range(len(ctext190za)):
ctext290za[i % len(PW2)].append(ctext190za[i])
ctext290za.sort()
ausgabe_90za = ""
z = 1
for i in ctext290za:
for j in range(len(i) - 1):
if z == 5:
ausgabe_90za += i[j + 1] + " "
z = 1
else:
ausgabe_90za += i[j + 1]
z += 1
print("PW1", PW[0])
print("PW2", PW2)
print("ausgabe_az09", ausgabe_az09)
print("ausgabe_90za", ausgabe_90za)

View File

@@ -0,0 +1,70 @@
#!/usr/bin/env python3
# -*- coding: utf8 -*-
# ausgabe_za FFFGA DDDFD DXAXA DAGDA XAXDX XFXDF DFGAG FAAXG AGAAG DAAAF FAXFA AAAGX XAAAD GGAFG FAXDG DXFAA XAGXX FXAXF XDDXG DGDFX FGFXA DFXFX FAXGA GDFXG XXXFA D
# ausgabe_za GXGGA DDDGD XXAFA DDFAA XAFDF FXFDG DXGAG GAAXF AGADF AAADG FAXXA DADFF FDDAD FGAXG XAFXG XFXDA FAGFX XFAXG FDXFF DFAGX XGXXA DGXGF XDFFD GAXXF FFFGD X
# text="Munitionierung beschleunigen Punkt Soweit nicht eingesehen auch bei Tag"
# PW="wikipedia, beobachtungsliste"
text = "GXGGA DDDGD XXAFA DDFAA XAFDF FXFDG DXGAG GAAXF AGADF AAADG FAXXA DADFF FDDAD FGAXG XAFXG XFXDA FAGFX XFAXG FDXFF DFAGX XGXXA DGXGF XDFFD GAXXF FFFGD X"
PW = "wikipedia, beobachtungsliste"
# PW auf Komma prüfen!!!
RN = ["AA", "AD", "AF", "AG", "AX", "DA", "DD", "DF", "DG", "DX", "FA", "FD", "FF", "FG", "FX", "GA", "GD", "GF", "GG",
"GX", "XA", "XD", "XF", "XG", "XX"]
alpha_az = "ABCDEFGHIKLMNOPQRSTUVWXYZ" # j wird durch i ersetzt
alpha_za = "ZYXWVUTSRQPONMLKIHGFEDCBA"
text = text.upper()
textij = text.replace("J", "I")
PW = PW.upper()
PW = PW.replace("J", "I")
PW = PW.split(",")
PW1az = ""
for b in PW[0] + alpha_az:
if b in alpha_az and b not in PW1az:
PW1az += b
PW1za = ""
for b in PW[0] + alpha_za:
if b in alpha_za and b not in PW1za:
PW1za += b
PW2 = ""
for i in PW[1]:
if i in alpha_az:
PW2 += i
ctext = ""
for i in textij:
if i in alpha_az:
ctext += i
WBaz = {}
for i in range(25):
WBaz[RN[i]] = PW1az[i]
WBza = {}
for i in range(25):
WBza[RN[i]] = PW1za[i]
ret = ['_'] * len(ctext)
lt, lp = len(ctext), len(PW2)
t1 = [(PW2[i], i) for i in range(len(PW2))]
ind = [q[1] for q in sorted(t1)]
upto = 0
for i in range(len(PW2)):
tic = int(lt / lp)
if ind[i] < lt % lp:
tic += 1
ret[ind[i]::lp] = ctext[upto:upto + tic]
upto += tic
ctext = ''.join(ret)
klartext_az = ""
for i in range(0, len(ctext), 2):
bi = ctext[i:i + 2]
if bi in WBaz:
klartext_az += WBaz[bi]
klartext_za = ""
for i in range(0, len(ctext), 2):
bi = ctext[i:i + 2]
if bi in WBza:
klartext_za += WBza[bi]
print("PW1", PW[0])
print("PW2", PW2)
print("klartext_az", klartext_az)
print("klartext_za", klartext_za)

View File

@@ -0,0 +1,82 @@
#!/usr/bin/env python3
# -*- coding: utf8 -*-
text = "Munitionierung beschleunigen Punkt Soweit nicht eingesehen auch bei Tag"
PW = "wikipedia, beobachtungsliste"
# PW auf Komma prüfen!!!
RN = ["AA", "AD", "AF", "AG", "AX", "DA", "DD", "DF", "DG", "DX", "FA", "FD", "FF", "FG", "FX", "GA", "GD", "GF", "GG",
"GX", "XA", "XD", "XF", "XG", "XX"]
alpha_az = "ABCDEFGHIKLMNOPQRSTUVWXYZ" # j wird durch i ersetzt
alpha_za = "ZYXWVUTSRQPONMLKIHGFEDCBA"
text = text.upper()
textij = text.replace("J", "I")
PW = PW.upper()
PW = PW.replace("J", "I")
PW = PW.split(",")
PW1az = ""
for b in PW[0] + alpha_az:
if b in alpha_az and b not in PW1az:
PW1az += b
PW1za = ""
for b in PW[0] + alpha_za:
if b in alpha_za and b not in PW1za:
PW1za += b
PW2 = ""
for i in PW[1]:
if i in alpha_az:
PW2 += i
klartext = ""
for i in text:
if i in alpha_az:
klartext += i
WBaz = {}
for i in range(25):
WBaz[PW1az[i]] = RN[i]
WBza = {}
for i in range(25):
WBza[PW1za[i]] = RN[i]
ctext1az = ""
for b in klartext:
ctext1az += WBaz[b]
ctext1za = ""
for b in klartext:
ctext1za += WBza[b]
ctext2az = []
for i in range(len(PW2)):
ctext2az.append([PW2[i] + str(i + 10)])
for i in range(len(ctext1az)):
ctext2az[i % len(PW2)].append(ctext1az[i])
ctext2az.sort()
ausgabe_az = ""
z = 1
for i in ctext2az:
for j in range(len(i) - 1):
if z == 5:
ausgabe_az += i[j + 1] + " "
z = 1
else:
ausgabe_az += i[j + 1]
z += 1
ctext2za = []
for i in range(len(PW2)):
ctext2za.append([PW2[i] + str(i + 10)])
for i in range(len(ctext1za)):
ctext2za[i % len(PW2)].append(ctext1za[i])
ctext2za.sort()
ausgabe_za = ""
z = 1
for i in ctext2za:
for j in range(len(i) - 1):
if z == 5:
ausgabe_za += i[j + 1] + " "
z = 1
else:
ausgabe_za += i[j + 1]
z += 1
print("PW1", PW[0])
print("PW2", PW2)
print("ausgabe_za", ausgabe_az)
print("ausgabe_za", ausgabe_za)

View File

@@ -0,0 +1,37 @@
#!/usr/bin/python
# -*- coding: utf8 -*-
def buchstabenzaehl(buchstabe, anzahl):
if buchstabe in anzahl:
anzahl[buchstabe] = anzahl[buchstabe] + 1
else:
anzahl[buchstabe] = 1
def wortzaehl(wort):
anzahl = {}
for buchstabe in wort:
buchstabenzaehl(buchstabe.upper(), anzahl)
return anzahl
while 1:
print("Zum Beenden: kein Wort eingeben und Return drücken")
eingabe = input("Bitte Wort eingeben für welches Anagramme gesucht werden sollen: ")
eingabe = eingabe.rstrip()
if eingabe == "":
break
eingabezaehl = wortzaehl(eingabe)
wbfile = open("../../data/german.dic", "r") # german.dic von https://sourceforge.net/projects/germandict/
for line in wbfile:
line = line.strip(" \t\n\r")
if eingabe.upper() == line.upper():
continue
if len(eingabe) != len(line):
continue
if eingabezaehl == wortzaehl(line):
print(line)
wbfile.close()
print("---keine weiteren Anagramme gefunden---")
print()
print("Ich hoffe es hat geholfen! Bye,Bye!")

View File

@@ -0,0 +1,33 @@
abcgross = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
abcklein = "abcdefghijklmnopqrstuvwxyz"
txt = input("Bitte zu kodierenden Text eingeben:")
r = 0
while r > 26 or r < 1:
r = int(input("Um wieviele Stellen soll verschoben werden?(1-26) "))
atxt = ""
warn = 0
warntxt = ""
for i in txt:
if i == " ":
atxt = atxt + " "
continue
if i.upper() not in abcgross:
atxt = atxt + i # nicht codierbare Zeichen direkt zur Ausgabe bitte!
warn = warn + 1
warntxt = warntxt + i + ","
continue
if i == i.upper():
abc = abcgross
if i == i.lower():
abc = abcklein
abcl = len(abc)
for j in range(abcl):
if i == abc[j]:
if j + r >= abcl:
atxt = atxt + abc[j + r - abcl]
else:
atxt = atxt + abc[j + r]
print("Codierter Text:", atxt)
if warn > 0:
print("Achtung! folgende im Text enthaltenen Zeichen wurden nicht kodiert:", warntxt[:-1])

View File

@@ -0,0 +1,31 @@
abc = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
"W", "X", "Y", "Z"]
letterGoodness = [0.0817, 0.0149, 0.0278, 0.0425, 0.127, 0.0223, 0.0202, 0.0609, 0.0697, 0.0015, 0.0077, 0.0402, 0.0241,
0.0675, 0.0751, 0.0193, 0.0009, 0.0599, 0.0633, 0.0906, 0.0276, 0.0098, 0.0236, 0.0015, 0.0197,
0.0007]
txt = input("bitte Text:")
ausgabe = ""
ausgabeg = 0
ausgaber = 0
for r in range(1, 27):
atxt = ""
atxtg = 0
for i in txt.upper():
if i == " ":
atxt = atxt + " "
continue
abcl = len(abc)
for j in range(abcl):
if i == abc[j]:
if j + r >= abcl:
atxt = atxt + abc[j + r - abcl]
atxtg = atxtg + letterGoodness[j + r - abcl]
else:
atxt = atxt + abc[j + r]
atxtg = atxtg + letterGoodness[j + r]
if atxtg > ausgabeg:
ausgabe = atxt
ausgabeg = atxtg
ausgaber = r
print("Der dekodierte Text laut wahrscheinlich: ", ausgabe)

View File

@@ -0,0 +1,70 @@
#!/usr/bin/python3
# -*- coding: utf8 -*-
BW = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10, 'K': 11, 'L': 12, 'M': 13,
'N': 14,
'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19, 'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25, 'Z': 26}
UBW = {v: k for k, v in BW.items()}
PW = "Standardobjekteabcdefghijklmnopqrstuvwxyz"
text = "Da ist ein ganz einfacher und sinnfreier Text um die Funktion zu testen und zu sehen was passiert."
pwl = len(PW)
encoded_text = ""
encoded_text_s = "" # wenn Leer und Sonderzeichen Schlüsselbuchstaben verbrauchen
auslz = 0 # auslasszähler zählt zeichen die im text nicht codiert wurden
for i in range(len(text)):
if text[i].upper() not in BW:
encoded_text += text[i]
auslz += 1
encoded_text_s += text[i]
else:
b1 = BW[text[i].upper()]
b2 = BW[PW[(i - auslz) % pwl].upper()]
b2s = BW[PW[i % pwl].upper()]
ba = (b1 + b2 - 1) % 26
bas = (b1 + b2s - 1) % 26
if ba == 0:
ba = 26
if bas == 0:
bas = 26
if text[i] == text[i].upper():
encoded_text += UBW[ba]
encoded_text_s += UBW[bas]
else:
encoded_text += UBW[ba].lower()
encoded_text_s += UBW[bas].lower()
text = encoded_text # zum überprüfen
# text=encoded_text_s #zum überprüfen
decoded_text = ""
decoded_text_s = ""
auslz = 0 # auslasszähler zählt zeichen die im text nicht codiert wurden
for i in range(len(text)):
if text[i].upper() not in BW:
decoded_text += text[i]
auslz += 1
decoded_text_s += text[i]
else:
b1 = BW[text[i].upper()]
b2 = BW[PW[(i - auslz) % pwl].upper()]
b2s = BW[PW[i % pwl].upper()]
ba = (b1 - b2 + 1) % 26
bas = (b1 - b2s + 1) % 26
if ba == 0:
ba = 26
if bas == 0:
bas = 26
if text[i] == text[i].upper():
decoded_text += UBW[ba]
decoded_text_s += UBW[bas]
else:
decoded_text += UBW[ba].lower()
decoded_text_s += UBW[bas].lower()
print(encoded_text)
print(decoded_text)
print()
print(encoded_text_s)
print(decoded_text_s)

View File

@@ -0,0 +1,68 @@
#!/usr/bin/env python3
# -*- coding: utf8 -*-
text = "Beispielklartext abcdefghijklmnopqrstuvwxyz"
# PW="Apfelstrudel"
PW = "teebaum"
# Chiffrat: IWBQYBWVDVZNOWFO ZIHKWXGCBBDVURTYSNQOMLEFPA
abc = "ABCDEFGHIKLMNOPQRSTUVWXYZ" # j wird als i chiffriert
text = text.upper()
PW = PW.upper()
if "J" in text:
text = text.replace("J", "I")
if "J" in PW:
PW = PW.replace("J", "I")
calpha = ""
for b in PW:
if b not in calpha:
calpha += b
for b in abc:
if b not in calpha:
calpha += b
CABC = {calpha[12]: calpha[12]}
c1 = calpha[:12]
c2 = calpha[13:]
c2 = c2[::-1]
for i in range(12):
CABC[c1[i]] = c2[i]
UCABC = {v: k for k, v in CABC.items()}
CABC.update(UCABC)
print(calpha)
atxt = ""
for b in text:
if b in CABC:
atxt += CABC[b]
else:
atxt += b
print(atxt)
hilfe = """
Die Woseley-Chiffre arbeitet mit einem
Schlüsselwort über welches dann ein Codequadrat
/Codealphabet gebildet wird mit welchem dann
sowohl kodiert als auch dekodiert wird.
Angefangen wird dabei mit dem jeweils ersten
Vorkommen eines Buchstaben im Schlüsselwort
und danach folgen die restlichen Buchstaben
des Alphabets die nicht im Schlüsselwort vorkommen.
Da hier nur 25 Zeichen zur Verfügung stehen wird
das J mit dem I zusammengefasst und als I behandelt
und dargestellt. Sonstige Zeichen die nicht im
Codealphabet vorhanden sind werden unverändert
ausgegeben.
Codequadrat mit Schlüsselwort: Teebaum
1 2 3 4 5
1 T E B A U
2 M C D F G
3 H I K L N
4 O P Q R S
5 V W X Y Z
Bei der Chiffrierung/Dechiffrierung wird
im Text nun der erste Buchstabe mit dem
letzten getauscht, der 2. mit dem vorletzten,
usw. also aus T wird Z und umgekehrt,
E<->Y, B<->X, A<->W usw..
nur ein K bleibt ein K
"""

View File

@@ -0,0 +1,59 @@
#!/usr/bin/python3
# -*- coding: utf8 -*-
PW = "Key"
text = "Dies ist ein geheimer Text"
BW = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10, 'K': 11, 'L': 12, 'M': 13,
'N': 14,
'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19, 'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25, 'Z': 26}
UBW = {v: k for k, v in BW.items()}
PWe = ""
PWd = ""
for b in PW:
if b.upper() in BW:
PWe += b.upper() # Sonderzeichen aus PW entfernen und
PWd += b.upper()
if len(PWe) < len(text):
for b in text:
if b.upper() in BW:
PWe += b.upper()
encoded_text = ""
auslz = 0 # auslasszähler zählt zeichen die im text nicht codiert wurden
for i in range(len(text)):
if text[i].upper() not in BW:
encoded_text += text[i]
auslz += 1
else:
b1 = BW[text[i].upper()]
b2 = BW[PWe[(i - auslz)]]
ba = (b1 + b2 - 1) % 26
if ba == 0:
ba = 26
if text[i] == text[i].upper():
encoded_text += UBW[ba]
else:
encoded_text += UBW[ba].lower()
text = encoded_text # zum überprüfen
decoded_text = ""
auslz = 0 # auslasszähler zählt zeichen die im text nicht codiert wurden
for i in range(len(text)):
if text[i].upper() not in BW:
decoded_text += text[i]
auslz += 1
else:
b1 = BW[text[i].upper()]
b2 = BW[PWd[(i - auslz)].upper()]
ba = (b1 - b2 + 1) % 26
if ba == 0:
ba = 26
PWd += UBW[ba]
if text[i] == text[i].upper():
decoded_text += UBW[ba]
else:
decoded_text += UBW[ba].lower()
print(encoded_text)
print(decoded_text)

View File

@@ -0,0 +1,59 @@
#!/usr/bin/env python3
# -*- coding: utf8 -*-
test = "Hallo"
t1r2 = "rank the code"
t2r2 = "rn h oeaktecd"
t3r3 = "coding"
t4r3 = "cnoigd"
t5r3 = "rank the code"
t6r3 = "r eaktecdnho"
def array_ausgabe(arri: list):
for line in arri:
print("".join(line))
print()
def encrypt(plain_text: str, rails: int):
arr = [["_" for x in range(len(plain_text))] for y in range(rails)]
r = 0
z = 0
plus = True
for b in plain_text:
arr[r][z] = b
z += 1
if r+1 == rails and plus:
plus = False
r -= 1
elif r-1 < 0 and not plus:
plus = True
r += 1
elif plus:
r += 1
else:
r -= 1
out = ""
for i in range(rails):
for j in range(len(plain_text)):
if arr[i][j] != "_":
out += arr[i][j]
print(out)
array_ausgabe(arr)
print()
def decrypt(cipher: str, rails: int):
arr = [["" for x in range(len(cipher))] for y in range(rails)]
for r in range(rails):
#arr[r][z] = b
pass
encrypt(t1r2, 2)
decrypt(t2r2, 2)
encrypt(t3r3, 3)
decrypt(t4r3, 3)
encrypt(t5r3, 3)
decrypt(t6r3, 3)

View File

@@ -0,0 +1,31 @@
from re import match
def unkennify(text):
# Funktion hier entnommen und angepasst: https://www.namesuppressed.com/software/kenny.py
decoded = ''
codemap = str.maketrans('MmPpFf', '001122')
print(codemap)
n_len = len(text)
i = 0
while i + 3 <= n_len:
if match('[MmPpFf]{3,}', text[i:i + 3]):
# 'mpf' -> '012' -> 5
num = int(text[i:i + 3].translate(codemap), 3)
# 5 -> 'f'
cypher = chr(num + ord('a'))
if text[i].isupper():
cypher = cypher.upper()
decoded = decoded + cypher
i = i + 3
else:
decoded = decoded + text[i]
i = i + 1
if i < n_len:
decoded = decoded + text[i:]
return decoded
print(unkennify("Fmpmppfmmfmp ppmmffmmfmfp ppmmmmpmf"))

View File

@@ -0,0 +1,104 @@
#!/usr/bin/env python3
# -*- coding: utf8 -*-
import math
def dec_to_maptiles(lat_deg, lon_deg, zoom):
lat_rad = math.radians(lat_deg)
n = 2.0 ** zoom
xtile = int((lon_deg + 180.0) / 360.0 * n)
ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n)
return xtile, ytile
def maptiles_to_dec(xtile, ytile, zoom):
n = 2.0 ** zoom
lon_dec = xtile / n * 360.0 - 180.0
lat_rad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
lat_dec = math.degrees(lat_rad)
return lat_dec, lon_dec
def dec_to_deg(lat_dec, lon_dec): # Dezimalgrad in Dezimalminuten (Ausgabe als String)
if lat_dec < 0:
lat_pre = "S"
else:
lat_pre = "N"
if lon_dec < 0:
lon_pre = "W"
else:
lon_pre = "E"
lat = abs(lat_dec)
lon = abs(lon_dec)
lat_degree = int(lat)
lon_degree = int(lon)
lat_minutes = (lat - lat_degree) * 60
lon_minutes = (lon - lon_degree) * 60
return ("{}{} {} {}{} {}".format(lat_pre, lat_degree, round(lat_minutes, 3), lon_pre, lon_degree,
round(lon_minutes, 3)))
# text="2248563 1378644"
# text="8783 5384"
# text="52.357780217032044 12.995710372924805"
# text="-41.85 -87.64999999999998"
text = "52.520803 13.4088653"
# https://tile.openstreetmap.org/19/281070/172330.png
hilfetext = """
Bei vielen Online-Kartendiensten wie Openstreetmap oder
Google-Maps erfolgt die Kartendarstellung über vorberechnete
"Kachel"-Grafikdateien, welche ein Adressierungssystem benötigen
damit je nach Koordinate und Zoomstufe auch der richtige
Kartenausschnitt dargestellt und klar ist welche Kacheln daneben
darzustellen ist wird.Bei OSM ist eine solche Kachel eine
PNG-Grafik mit 256x256 Pixeln und je nach Zoomstufe ist eine
unterschiedliche Anzahl solcher Kacheln/Tiles notwendig
um die ganze Welt abzubilden. Da je Zoomstufe sich die Anzahl
der benötigten Kacheln vervierfacht ist bei den meisten
Diensten bei Zoomlevel 18 Schluß, OSM geht bis Zoomlevel 19.
Um die einzelnen Kacheln beim tilemap-Server abzufragen brauch
man die Zoomstufe, einen X und einen Y-Wert wobei dies alles
ganzahlige Werte sind.
Aufgerufen von den Servern werden die Kacheln dann nach dem
Muster http://servername/Zoom/X/Y.png
Den Fernsehturm mit Zoomstufe 18 findet man z.B. bei Openstreetmap
hier: https://tile.openstreetmap.org/18/140836/85970.png
Die Funktion arbeitet hier auf die Art und Weise, daß man 2 durch
ein Freizeichen getrennte Zahlen eingibt.
Handelt es sich bei den angegebenen Zahlen um "Kommazahlen" welche
allerdings mit Punkt anzugeben sind (Bsp: 52.520803 13.4088653 )
geht die Funktion davon aus, daß es sich um Koordinaten in Dezimalgrad
handelt und sofern es gültige Koordinaten sind erfolgt eine Ausgabe
der X und Y Werte für die Zoomstufen und 1-25.
(Positive Zahlen stehen für Nord und Ost, negative für Süd und West)
Handelt es sich bei den beiden Zahlen um Ganzzahlen wird davon
ausgegangen, daß es sich um X und Y Werte handelt und es werde für
alle Zoomstufen von 1-25 Koordinaten in Dezimalminuten und
Dezimalgrad ausgegeben, sofern dies sinnvolle Koordinaten ergibt.
"""
text = text.split()
if "." in text[0] and len(text) == 2:
print("DEC -> Maptiles")
for zoom in range(1, 26):
try:
la = float(text[0])
lo = float(text[1])
if not la < -180 and not la > 180 and not lo < -180 and not lo > 180:
x, y = dec_to_maptiles(la, lo, zoom)
print("Zoom:{} X:{} \tY:{}".format(zoom, x, y))
except:
pass
elif len(text) == 2:
print("Maptiles->DEG,DEC")
for zoom in range(1, 26):
try:
la, lo = maptiles_to_dec(int(text[0]), int(text[1]), zoom)
if not la < -180 and not la > 180 and not lo < -180 and not lo > 180:
print("Zoom: {} \tDEG: {} \tDEC: {} {}".format(zoom, dec_to_deg(la, lo), round(la, 5), round(lo, 5)))
except:
pass
else:
print("Zahlen konnten nicht ermittelt werden!")

View File

@@ -0,0 +1,24 @@
# https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Python
# Kachelkoordinaten umrechnen
import math
def deg2num(lat_deg, lon_deg, zoom):
lat_rad = math.radians(lat_deg)
n = 2.0 ** zoom
xtile = int((lon_deg + 180.0) / 360.0 * n)
ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n)
return xtile, ytile
def num2deg(xtile, ytile, zoom):
n = 2.0 ** zoom
lon_deg = xtile / n * 360.0 - 180.0
lat_rad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
lat_deg = math.degrees(lat_rad)
return lat_deg, lon_deg
for i in range(22, 25):
x = num2deg(4496422252, 974119798, i)
print(i, x)

View File

@@ -0,0 +1,69 @@
#!/usr/bin/env python3
# -*- coding: iso-8859-15 -*-
#Klartext: Beispielklartext
#Schl<68>ssel: Apfelstrudel
#Chiffrat: 31 14 35 21 12 35 14 15 41 15 11 23 22 14 53 22
text="Be1ispie3lklartext was ist das?"
PW="A9pfelstr2udel"
QZ5=[11,12,13,14,15,21,22,23,24,25,31,32,33,34,35,41,42,43,44,45,51,52,53,54,55]
alpha5ij="ABCDEFGHIKLMNOPQRSTUVWXYZ" #j wird durch i ersetzt
alpha5uv="ABCDEFGHIJKLMNOPQRSTUWXYZ" #v wird durch u ersetzt
QZ6=[11,12,13,14,15,16,21,22,23,24,25,26,31,32,33,34,35,36,41,42,43,44,45,46,51,52,53,54,55,56,61,62,63,64,65,66]
alpha6="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
text=text.upper()
textij=text.replace("J","I")
textuv=text.replace("V","U")
PW=PW.upper()
PWi=PW.replace("J","I")
PWu=PW.replace("V","U")
passw5ij=""
for i in PWi:
if i in alpha5ij:passw5ij+=i
passw5uv=""
for i in PWu:
if i in alpha5uv:passw5uv+=i
passw6=""
for i in PWi:
if i in alpha6:passw6+=i
text5ij=""
for i in textij:
if i in alpha5ij:text5ij+=i
text5uv=""
for i in textuv:
if i in alpha5uv:text5uv+=i
text6=""
for i in text:
if i in alpha6:text6+=i
PW5ij=""
for b in PWi+alpha5ij:
if b in alpha5ij and b not in PW5ij:PW5ij+=b
PW5uv=""
for b in PWu+alpha5uv:
if b in alpha5uv and b not in PW5uv:PW5uv+=b
PW6=""
for b in PW+alpha6:
if b in alpha6 and b not in PW6:PW6+=b
WB5ij={}
for i in range(25):
WB5ij[PW5ij[i]]=str(QZ5[i])
WB5uv={}
for i in range(25):
WB5uv[PW5uv[i]]=str(QZ5[i])
WB6={}
for i in range(36):
WB6[PW6[i]]=str(QZ6[i])
ctext5ij=""
for b in text5ij:ctext5ij+=WB5ij[b]+" "
ctext5uv=""
for b in text5uv:ctext5uv+=WB5uv[b]+" "
ctext6=""
for b in text6:ctext6+=WB6[b]+" "
print("5x5(j=i)",text5ij,passw5ij)
print(ctext5ij)
print("5x5(v=u)",text5uv,passw5uv)
print(ctext5uv)
print("6x6",text6,passw6)
print(ctext6)

View File

@@ -0,0 +1,42 @@
#!/usr/bin/env python3
# -*- coding: utf8 -*-
# Klartext: Beispielklartext
# Schlüssel: Apfelstrudel
# Chiffrat: 31 14 35 21 12 35 14 15 41 15 11 23 22 14 53 22
text = "Beispielklartextjuiv"
PW = "Apfelstrudelijuv"
Z = "0123456789"
QZ5 = [11, 12, 13, 14, 15, 21, 22, 23, 24, 25, 31, 32, 33, 34, 35, 41, 42, 43, 44, 45, 51, 52, 53, 54, 55]
alpha5ij = "ABCDEFGHIKLMNOPQRSTUVWXYZ" # j wird durch i ersetzt
alpha5uv = "ABCDEFGHIJKLMNOPQRSTUWXYZ" # v wird durch u ersetzt
QZ6 = [11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 41, 42, 43, 44, 45, 46, 51, 52, 53, 54,
55, 56, 61, 62, 63, 64, 65, 66]
alpha6 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
text = text.upper()
textij = text.replace("J", "I")
textuv = text.replace("V", "U")
PW = PW.upper()
PWi = PW.replace("J", "I")
PWu = PW.replace("V", "U")
PW5ij = ""
for b in PWi + alpha5ij:
if b in alpha5ij and b not in PW5ij:
PW5ij += b
PW5uv = ""
for b in PWu + alpha5uv:
if b in alpha5uv and b not in PW5uv:
PW5uv += b
PW6 = ""
for b in PW + alpha6:
if b in alpha6 and b not in PW6:
PW6 += b
print(PW5ij)
print(PW5uv)
print(PW6)
print(PW)
print(textij)

View File

@@ -0,0 +1,58 @@
#!/usr/bin/python3
# -*- coding: utf8 -*-
BW = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10, 'K': 11, 'L': 12, 'M': 13,
'N': 14,
'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19, 'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25, 'Z': 26}
UBW = {v: k for k, v in BW.items()}
text = "12 34567890abc defghijklmnopqr, stuvwxyz5ABCDEFGHI JKLMNOPQRSTUVWXYZ"
# 2468024680LOORTVXZBDFHJLNPRTVXZBDFHJLNPRTVXZBDFHJLNPRTVXZBDFHJ
encoded_text = ""
vz = 1 # verschiebezähler
for i in text:
if i.upper() not in BW:
try:
az = int(i)
except:
encoded_text += i
else:
ba = (az + vz) % 10
encoded_text += str(ba)
vz += 1
else:
b1 = BW[i.upper()]
ba = (b1 + vz) % 26
if ba == 0:
ba = 26
if i == i.upper():
encoded_text += UBW[ba]
else:
encoded_text += UBW[ba].lower()
vz += 1
text = encoded_text # zum überprüfen
decoded_text = ""
vz = 1 # verschiebezähler
for i in text:
if i.upper() not in BW:
try:
az = int(i)
except:
decoded_text += i
else:
ba = (az - vz) % 10
decoded_text += str(ba)
vz += 1
else:
b1 = BW[i.upper()]
ba = (b1 - vz) % 26
if ba == 0:
ba = 26
if i == i.upper():
decoded_text += UBW[ba]
else:
decoded_text += UBW[ba].lower()
vz += 1
print(encoded_text)
print(decoded_text)

View File

@@ -0,0 +1,38 @@
#!/usr/bin/env python3
# -*- coding: utf8 -*-
RZA = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000, '\u2181': 5000, '\u2182': 10000,
'\u2187': 50000, '\u2188': 100000}
AZR = [(100000, '\u2188'), (90000, '\u2182\u2188'), (50000, '\u2187'), (40000, '\u2182\u2187'),
(10000, '\u2182'), (9000, 'M\u2182'), (5000, '\u2181'), (4000, 'M\u2181'), (1000, 'M'), (900, 'CM'), (500, 'D'),
(400, 'CD'), (100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'), (10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')]
while True:
rz = input("Bitte römische Zahl eingeben: ")
rz = rz.rstrip()
rz = rz.upper()
try:
az = 0
for i in range(len(rz)):
if i == len(rz) - 1:
az += RZA[rz[i]]
print(rz, "=", az)
else:
if RZA[rz[i]] < RZA[rz[i + 1]]:
az -= RZA[rz[i]]
else:
az += RZA[rz[i]]
except:
try:
zahl = int(rz)
if zahl > 500000:
print("Nööö, größer als 500000 mag ich nicht")
continue
rom = ""
for az, romz in AZR:
count = zahl // az
zahl -= az * count
rom += romz * count
print(rz, "=", rom)
except:
print("Es konnte keine römische oder arabische Zahl erkannt werden")