Šifra ADFG(V)X – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Šifra ADFG(V)X – Python – Fórum – Programujte.comŠifra ADFG(V)X – Python – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
18. 11. 2021   #1
-
0
-

Ahoj, opravdu si už nevím rady s touhle šifrou a tak se obracím na Vás, jestli by mi někdo z vás mohl pomoci. Samozřejmě je to úkol do školy, abych prolezl... V Pythonu jsem nikdy předtím neprogramoval (pouze ty úkoly které jsme dostali od září) Mám hotové nějaké věci, ale nedokážu si poradit s šifrováním. Dejme tomu, že budu mít OT = "Ahoj" tudíž si jej rozdělím na ["A", "H", "O", "J"] Z náhodně vygenerované tabulky 5x5 (teď beru jen variantu s tabulkou 5x5) potřebuju zjistit kde se nachází písmena OT a nahradit je za "Souřadnice" ADFGX                            A D F G X
Tabulka bude třeba:    A  V D L Q Y

                                   D  O F J H T

                                   F  X S M R K

                                  G  P I N G E

                                  X  B A Z C U
Takže zadaný text "AHOJ" -> XF DG DA DF

Tady je co už mám napsaný a jak jsem to řešil. Vím, je to jak od *******,ale prostě jsem začátečník a po tomhle semestru už se s Pythonem nebudu nikdy zabývat. PS: Pracuju rovnou s GUI.

import random
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import QtGui, uic
 
qtCreatorFile = "ADFG(V)X_Sifra_GUI.ui" # Enter file here.
 
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)

# Verze5 = 'ADFGX'
 
class MyApp(QMainWindow, Ui_MainWindow):

    def Sifrovani(self):
        """Zadani OT a klice"""
        OT = str(self.Otevreny_Text.text()).upper()
        Klic_Zadany = str(self.Klic_Text.text()).upper()
        
        CZ_Abeceda = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","X","Y","Z"]
        
        Diakritika = {ord("Á"):"A", ord("Č"):"C", ord("É"):"E", ord("Ě"):"E", ord("Ď"):"D", ord("Í"):"I", ord("Ň"):"N", ord("Ó"):"O", ord("Ř"):"R", ord("Š"):"S", ord("Ť"):"T", ord("Ů"):"U", ord("Ú"):"U", ord("Ý"):"Y", ord("Ž"):"Z"}
        SpecialZnak = {ord("!"):"", ord("?"):"", ord("*"):"", ord(":"):"", ord(";"):"", ord("."):"", ord("_"):"", ord("-"):"", ord(" "):"",ord(" "):"XMEZERAX"}
        Cisla = {ord("0"):"XPTAX", ord("1"):"XVITX", ord("2"):"XINUX", ord("3"):"XJAKX", ord("4"):"XSTUX", ord("5"):"XOCIX", ord("6"):"XNEIX", ord("7"):"XRDHX", ord("8"):"XPOLX", ord("9"):"XFGHX",}
        

"""Osetreni"""
        OT = OT.translate(Diakritika)
        OT = OT.translate(SpecialZnak)
        OT = OT.translate(Cisla)
        
        Klic_Zadany = Klic_Zadany.translate(Diakritika)
        Klic_Zadany = Klic_Zadany.translate(SpecialZnak)
               
        Klic = []
        Tabulka = []
        
        """Osetreni duplikace - vráceno v listu"""
        for i in Klic_Zadany:
            if i not in Klic:
                Klic.append(i)
        
        for i in CZ_Abeceda:
                if i in Tabulka:
                    pass
                else:
                    Tabulka +=i
        
        random.shuffle(Tabulka)
        
        Sifrovaci_Tabulka = []
        radekPomocny = ""
        ntice = 5       
            
        for i in range (0, len(Tabulka)):
            znak = Tabulka[i]
            radekPomocny += znak
            if len(radekPomocny) == ntice:
                Sifrovaci_Tabulka.append(radekPomocny)
                radekPomocny = ""

        if len(radekPomocny) > 0:
            Sifrovaci_Tabulka.append(radekPomocny)
        
        
        random.shuffle(Sifrovaci_Tabulka)
        
        prvnichPet = Sifrovaci_Tabulka[0]
        druhychPet = Sifrovaci_Tabulka[1]
        tretichPet = Sifrovaci_Tabulka[2]
        ctvrtychPet = Sifrovaci_Tabulka[3]
        patychPet = Sifrovaci_Tabulka[4]    

        self.Tabulka_5_0.setText(str(prvnichPet))
        self.Tabulka_5_1.setText(str(druhychPet))
        self.Tabulka_5_2.setText(str(tretichPet))
        self.Tabulka_5_3.setText(str(ctvrtychPet))
        self.Tabulka_5_4.setText(str(patychPet))
        
        print(prvnichPet)
        print(druhychPet)
        print(tretichPet)
        print(ctvrtychPet)
        print(patychPet)
        print(OT)
        
        OT_list = []
        
        # for i in OT:
        #     OT_list += i

        # print(OT_list)
        
        #for i in range(0,len(OT)):
            #OT_list.append(ord(OT[i]))
        #print(OT_list)
        
        Verze5 = 'ADFGX'
        Zasifrovany_Znak = []
        # Radek = ""
        # Sloupec = ""
        # print(type(Radek))
        # print(type(Sloupec))
        print("----------")
        """Zjisteni pozice znaku OT v tabulce"""
        for Znak in OT_list:
            Radek = 0
            Sloupec = 0
            hledanyZnak = Znak
        
            for i in range(0, len(Sifrovaci_Tabulka)):
                for j in range(0, len(Sifrovaci_Tabulka[i])):
                    if hledanyZnak == Sifrovaci_Tabulka[i][j]:
                        Verze5.index(OT_list)
                        i += Verze5[Radek]
                        j += Verze5[Sloupec]
                        ZasifrovanyZnak = i + j

        
        print(Zasifrovany_Znak)
        return 1


                              
    def __init__(self):
        QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.Sifrovat.clicked.connect(self.Sifrovani)
        #self.Desifrovat.clicked.connect(self.Desifrovani)
       
     
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

Nahlásit jako SPAM
IP: 195.178.92.–
gna
~ Anonymní uživatel
1851 příspěvků
19. 11. 2021   #2
-
+1
-
Zajímavé

Když v tom cyklu používáš i a j jako indexy do tabulky, tak pak radek a sloupec je to i a j. A pro zjištění kódu k nim nebudeš nic přičítat, ale zase je použiješ jen jako indexy. 

for i in range(0, len(Sifrovaci_Tabulka)):
    for j in range(0, len(Sifrovaci_Tabulka[i])):
        if hledanyZnak == Sifrovaci_Tabulka[i][j]:
            kr = Verze5[i]
            ks = Verze5[j]
            ZasifrovanyZnak = kr + ks

A možná to vyhoď do funkce a ještě bych ti poradil funkci zip na spojení dvou kolekcí. 

def enc(tabulka, znak):
    """C => RS"""
    for kr, radek_tabulky in zip("ADFGX", tabulka):
        for ks, znak_radku in zip("ADFGX", radek_tabulky):
            if znak_radku == znak:
                return kr + ks
    raise ValueError("Neznamy znak!")


def dec(tabulka, kod):
    """RS => C"""
    for kr, radek_tabulky in zip("ADFGX", tabulka):
        for ks, znak_radku in zip("ADFGX", radek_tabulky):
            if kr + ks == kod:
                return znak_radku
    raise ValueError("Neznamy kod!")
Nahlásit jako SPAM
IP: 213.211.51.–
19. 11. 2021   #3
-
0
-

#2 gna
Ajo, děkuju.

Nahlásit jako SPAM
IP: 2a00:1028:8d19:ad32:3475:1ff2:fbe9:d031...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

šifra — založil selkir

Šifra — založil Jane Sheppard

Vigenerova šifra — založil jarda kužel

Césarova šifra — založil Radek

MD5 šifra - ??? — založil Tocimanko

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý