Playfair Verschlüsselung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Erichmo
User
Beiträge: 13
Registriert: Donnerstag 1. August 2019, 16:28

Hallo zusammen,

ich versuche aktuell eine Playfair Verschlüsselung zu programmieren.
Mein bisheriger Code sieht wie folgt aus:
from string import ascii_uppercase as asc

Code: Alles auswählen

import sys

from string import ascii_uppercase as asc


#input("Ihr Schlüsselwort: ") #Schlüsselwort Eingabe

#text = input("Ihr Text: ") #Text Eingabe

#############################################################

text = "hier LOmmt der Klartext!"

key = "Hallo"

text2 = text.replace(" ","") #Leerzeichen entfernen

text3 = text2.upper() #Text groß schreiben

for i in text3: #Alle Sonderzeichen filtern
    if i in text3 not in asc:
       text4 = text3.replace(i,"")
       
if len(text4) % 2:
    text5 = text4 + "X"
else:
    text5 = text4
    
    
x = len(text5)
h = 2
e = 2
b = 0
Liste = list()

while h < x + 1 :
    
    if h < x + 1:
        #print (text43[b:e])
        text6 = (text5[b:e])
        Liste.append(text6)
        h =  h + 2
        e = e + 2
        b = b + 2

print (Liste)

t = ()

key_ABC = []

key1 = lambda x: x.upper().replace("J","I")


#Buchstabenfolge für Matrix generieren

for i in key1(key + asc):
    if i not in key_ABC and i in asc:
        
        key_ABC.append(i)
        

#Matrix erzeugen        
        
Matrix = [key_ABC[i:i+5] for i in range(0, len(key_ABC),5)] 


print("\n___________\n",*Matrix[0],"\n",*Matrix[1],"\n",*Matrix[2],"\n",*Matrix[3],#Matrix formatiert asugeben
      "\n",*Matrix[4],"\n___________")

#Veschlüsseln wenn beide Buchstaben in einer Zeile liegen

d = 0
e = 1
a = 0

while True:
    
    if text[d] in Matrix[a] and text[e] in Matrix[a]:
        b = Matrix[a].index(text5[d])+1
        if e < 4:
            c = Matrix[a].index(text5[e])+1
        else:
            c = Matrix[a].index(text5[e-5])
        print (text5[d],text5[e],"-->",Matrix[a][b],Matrix[a][c])
        d = d + 2
        e = e + 2
        
    else:
        d = d + 2
        e = e + 2
        
    if e > 5:
        a = a + 1
        d = d - 4
        e = e - 4

Für die Verschlüsselung bin ich gerade noch an dem ersten Fall (Beide Buchstaben liegen in einer Zeile der Matrix) dran.
Leider bekomme ich die Verschlüsselten Buchstaben nicht ausgegeben.
Ich finde leider noch ziemlicher Anfänger und kann meinen Fehler nicht finden:(

Die Ausgabe ist dann :

Code: Alles auswählen

  if text[d] in Matrix[a] and text[e] in Matrix[a]:

IndexError: list index out of range
Vielen Dank schonmal!
Zuletzt geändert von Erichmo am Donnerstag 1. August 2019, 16:48, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte Code in die dafuer vorgesehenen Tags setzen. Dazu im vollstaendigen Editor den Code markieren und de </>-Knopf druecken.
Erichmo
User
Beiträge: 13
Registriert: Donnerstag 1. August 2019, 16:28

__deets__ hat geschrieben: Donnerstag 1. August 2019, 16:41 Bitte Code in die dafuer vorgesehenen Tags setzen. Dazu im vollstaendigen Editor den Code markieren und de </>-Knopf druecken.
Sorry, ist mein erster Beitrag :)
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Erichmo: Warum sollte diese Ausnahme denn nicht kommen? An welcher Stelle denkst Du denn, dass das sichergestellt wird?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Erichmo
User
Beiträge: 13
Registriert: Donnerstag 1. August 2019, 16:28

__blackjack__ hat geschrieben: Donnerstag 1. August 2019, 17:00 @Erichmo: Warum sollte diese Ausnahme denn nicht kommen? An welcher Stelle denkst Du denn, dass das sichergestellt wird?
Welche Ausnahme meinst du ?

Das text5[d] in Matrix[a].... ?
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Erichmo: Na den `IndexError` den Du bekommst. Das in der Zeile `Matrix` die einzige Liste ist, muss das ja von dem Teilausdruck ``Matrix[a]`` kommen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Erichmo
User
Beiträge: 13
Registriert: Donnerstag 1. August 2019, 16:28

__blackjack__ hat geschrieben: Donnerstag 1. August 2019, 17:25 @Erichmo: Na den `IndexError` den Du bekommst. Das in der Zeile `Matrix` die einzige Liste ist, muss das ja von dem Teilausdruck ``Matrix[a]`` kommen.
Ja natürlich, aber ich kann nicht nachvollziehen weshalb dieser Fehler entsteht
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Wann, denkst Du denn, wird die Endlosschleife verlassen?
Erichmo
User
Beiträge: 13
Registriert: Donnerstag 1. August 2019, 16:28

Sirius3 hat geschrieben: Donnerstag 1. August 2019, 19:08 Wann, denkst Du denn, wird die Endlosschleife verlassen?
Sie soll beendet werden sobald einmal alle 5 Spalten der Matrix durchlaufen sind. Dieser Teil fehlt allerdings noch.
Aber das dürfte ja nicht das Problem für den Fehler sein oder etwa doch ?
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Erichmo: Oder etwa doch? Wenn die Schleife nicht beendet wird, was denkst Du denn was sonst passieren sollte wenn `a` so gross wird, dass es keine *Zeilen* mehr in `Matrix` mit diesem Index gibt?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Erichmo
User
Beiträge: 13
Registriert: Donnerstag 1. August 2019, 16:28

__blackjack__ hat geschrieben: Donnerstag 1. August 2019, 22:14 @Erichmo: Oder etwa doch? Wenn die Schleife nicht beendet wird, was denkst Du denn was sonst passieren sollte wenn `a` so gross wird, dass es keine *Zeilen* mehr in `Matrix` mit diesem Index gibt?
Vielen Dank, daran hats gelegen.
Ich bin wirklich noch blutiger Anfänger und hab kaum Erfahrung...
Antworten