def main(): # Codifica un text entrat per teclat. # Si el text entrat per teclat és buit codifica el text de l'enunciat de la pràctica # La codificació és amb els mètodes : Cesar, PolyBios i RailFence. # En el cas de RailFence també desordena els espais ja que és un mètode de transformació i ho pot fer. print("Entra el text que vols codificar i descodificar,") print("Si apretes INTRO fara automaticament el de l'apartat d. ") text = input("text : ") if text == "": text = "it's the honky tonk women that gimme, gimme, gimme the honky tonk blues (honky tonk women, by the rolling stones)" cesar = Cesar.codificaText(text, 17) print("Amb el metode Cesar : ") print(cesar) print() print("------------------------------------") print("Amb el metode PolyBios : ") polybios = PolyBios.codificaText(text, 5, 5) print(polybios) print() print("------------------------------------") # En aquest cas el text no concordarà del tot àmb una possible solució teva ja que també es codifiquen TOTS els caràcters!! print("Amb el metode RailFence : ") railFence = RailFence.codifica(text, 7) print(railFence) print() print("------------------------------------")
def CasseCesar(phraseCodee): # def cesar ... alphabet4 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"#$%&'()*+,-./:;<=>?@[]^_`{|}~ ¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöœ÷øùúûüýþÿ\n\r\t\\" alphabet = ['T','R','O','I','S','È','M','E',' ','P','A','\n','B','o','r','d','i','n','—','L','e','s','F','a','ç','à','c','u','É','p','l','g','1','8','2','0','C','H','5','t','m','b','h','v',';','6',',','f','é','’','7','!','q','-','?','x','.','ê','û','N','K','z','w','y','è','J',':','À','V','k','ô','j','ù','D','Q','«','»','°','3','ï','4','â','î','U','œ','…','G','Z','(',')','Ê','Y','W','X','ü','[',']','9','Ç','ë','Ô','=','\''] frequence = [0.041009917529270565,0.04015107108886699,0.03564212727674824,0.08513315340500408,0.06484290625046968,0.00010735580505044649,0.10069974513731882,0.07547113095046389,16.758241168374695,0.11959436682619738,0.06537968527572191,0.5444012874108142,0.04058049430906877,4.091973865302818,5.124629354083064,2.7118076355742784,5.802903330391784,5.441543690591981,0.07879916090702772,0.12549893610397195,11.177671710242388,6.133344498337059,0.03059640443937725,6.355463658986432,0.08298603730399515,0.44316476324824317,2.298917209350261,4.654840351182309,0.0049383670323205385,2.058440206037261,4.305611917353207,0.6575543059339848,0.012667984995952687,0.005045722837370985,0.007514906353531255,0.01341947563130581,0.07192838938379915,0.006441348303026789,0.0032206741515133945,5.872147824649322,2.029776206088792,0.6368346355592486,0.6597014220349937,1.2835460051831382,0.09372161780903979,0.002683895126261162,1.5511840271739015,0.8002301708460282,1.5334703193405776,1.0833274287640555,0.0024691835161602693,0.13419475631305813,0.849506485364183,0.24605950517562336,0.09619080132520005,0.30671553502912563,0.5177770477583035,0.17284284613121884,0.025980104822208052,0.0814830560332889,0.037789243377757166,0.10434984250903401,0.07031805230804246,0.1870138123978778,0.22405156514028182,0.028986067363620555,0.07579319836561522,0.01664014978281921,0.04455265909593529,0.04358645685048128,0.05303376769492057,0.2676380219907631,0.03027433702422591,0.06548704108077236,0.03435385761614288,0.11927229941104606,0.11454864398882642,0.0012882696606053578,0.004508943812118752,0.02114909359493796,0.0020397602959584833,0.03939958045351386,0.03231409732018439,0.018143131053525458,0.020934381984837064,0.0946878200544938,0.00858846440403572,0.00021471161010089298,0.00429423220201786,0.00429423220201786,0.0005367790252522325,0.005475146057572771,0.0025765393212107157,0.0122385617757509,0.0006441348303026789,0.0044015880070683066,0.0044015880070683066,0.0017176928808071438,0.0006441348303026789,0.001073558050504465,0.00010735580505044649,0.00010735580505044649,0.00010735580505044649] tableau = [] compte = [] x = 0 for lettre in phraseCodee: try: position = tableau.index(lettre) compte[position] = compte[position] +1 except : tableau.append(lettre) # .append = Ajoute un tableau compte.append(1) x+= 1 frequencePhraseCodee = [] for i in range(0,len(compte)): frequencePhraseCodee.append(compte[i] / len(phraseCodee)) lettreMaxRef = frequence.index(max(frequence)) lettreMaxPhraseCodee = frequencePhraseCodee.index(max(frequencePhraseCodee)) caractereMaxRef = alphabet[lettreMaxRef] caractereMaxPhraseCodee = tableau[lettreMaxPhraseCodee] caractereRefApparaitLePlus = alphabet4.index(caractereMaxRef) caracterePhraseCodeeApparaitLePlus = alphabet4.index(caractereMaxPhraseCodee) decalage = caractereRefApparaitLePlus - caracterePhraseCodeeApparaitLePlus return decalage, Cesar.cesar(phraseCodee, decalage, 4)
def _(): message = "This text is a sample to be encode and decode with various encryption methods." cesar = Cesar(3) # Offset = 3 vigenere = Vigenere("password") # Key = password rot13 = ROT13() vernam = Vernam(len(message)) # RandomKey length = length of message rsa = RSA(33967, 917227) # p et q prime number @it('should test the constructor of Cesar encryption module') def testConstructorOfCesarModule(): assert cesar.offset == 3 @it('should test the constructor of Vigenere encryption module') def testConstructorOfVigenereModule(): assert vigenere.key == "password" @it('should test the constructor of ROT13 encryption module') def testConstructorOfROT13Module(): assert rot13.rotation == 13 @it('should test the constructor of Vernam encryption module') def testConstructorOfVernamModule(): assert len(vernam.key) == len(message) @it('should test the constructor of RSA encryption module') def testConstructorOfRSAModule(): assert rsa.p == 33967 assert rsa.q == 917227 @it('should test the Cesar encryption method') def testCesarEncryptionMethod(): encoded = cesar.encrypt(message) decoded = cesar.decrypt(encoded) assert decoded == message @it('should test the Vigenere encryption method') def testVigenereEncryptionMethod(): encoded = vigenere.encrypt(message) decoded = vigenere.decrypt(encoded) assert decoded == message @it('should test the ROT13 encryption method') def testROT13EncryptionMethod(): encoded = rot13.encrypt(message) decoded = rot13.decrypt(encoded) assert decoded == message @it('should test the Vernam encryption method') def testVernamEncryptionMethod(): encoded = vernam.encrypt(message) decoded = vernam.decrypt(encoded) assert decoded == message @it('should test the RSA encryption method') def testRSAEncryptionMethod(): encoded = rsa.encrypt(message) decoded = rsa.decrypt(encoded) assert decoded == message
def tryCesarCompare(nomeEntrada, nomeSaida): inputFile = Util.scanFile(nomeEntrada) outputFile = Util.scanFile(nomeSaida) key = (ord(outputFile[0]) - ord(inputFile[0])) % 256 retornoCesar = Cesar.criptCompare(inputFile, outputFile, key) if retornoCesar: print("Algoritmo: Cifra de Cesar2\nChave: " + str(key)) return True return False
def tryCesar(nomeEntrada, nomeSaida): inputFile = Util.scanFile(nomeEntrada) outputFile = Util.scanFile(nomeSaida) key = (ord(outputFile[0]) - ord(inputFile[0])) % 256 retornoCesar = Cesar.cript(nomeEntrada, key) # if filecmp.cmp(nomeSaida, "./saidaCriptCesar.txt"): if retornoCesar == outputFile: print("Algoritmo: Cifra de Cesar\nChave: " + str(key)) return True return False
def __init__(self, parent=None): # constructeur de l'objet QWidget.__init__(self, parent) self.onglet = QTabWidget() #Consctructeur des onglets self.largonjem = QWidget() #QWidget largonjem //OPE self.cesar = QWidget() #QWidget Cesar //OPE self.elgamal = QWidget() #QWidget elgamal //OPE self.eratos = QWidget() #QWidget eratos //OPE self.divers = QWidget() #QWidget Chinois && Wilson //OPE self.sha = QWidget() #QWidget sha //OPE self.rsa = QWidget() #QWidget rsa //OPE #rsa self.label_rsa_cle_public = QLabel(self.trUtf8("Clé public")) self.label_rsa_cle_prive = QLabel(self.trUtf8("Clé privée")) self.label_rsa_module = QLabel(self.trUtf8("Module")) self.edit_rsa_public = QLineEdit() self.edit_rsa_privee = QLineEdit() self.edit_rsa_module = QLineEdit() self.label_text_edit_rsa_decrypt = QLabel(self.trUtf8("Texte à crypter : ")) self.label_text_edit_rsa_crypt = QLabel(self.trUtf8("Texte à décrypter : ")) self.text_edit_rsa_decrypt = QTextEdit("abc") self.text_edit_rsa_crypt = QTextEdit() self.button_rsa_crypter = QPushButton("Crypter") self.button_rsa_decrypter = QPushButton("Decrypter") self.button_rsa_generer = QPushButton(self.trUtf8("Génerer")) layout_rsa_main = QGridLayout() layout_rsa_main.addWidget(self.label_rsa_cle_public, 0,0) layout_rsa_main.addWidget(self.label_rsa_cle_prive, 1,0) layout_rsa_main.addWidget(self.label_rsa_module, 2,0) layout_rsa_main.addWidget(self.edit_rsa_public, 0,1) layout_rsa_main.addWidget(self.edit_rsa_privee, 1, 1) layout_rsa_main.addWidget(self.edit_rsa_module, 2,1) layout_rsa_main.addWidget(self.label_text_edit_rsa_decrypt, 4,0) layout_rsa_main.addWidget(self.label_text_edit_rsa_crypt, 4,1) layout_rsa_main.addWidget(self.text_edit_rsa_decrypt, 5,0) layout_rsa_main.addWidget(self.text_edit_rsa_crypt, 5,1) layout_rsa_main.addWidget(self.button_rsa_crypter, 6,0) layout_rsa_main.addWidget(self.button_rsa_decrypter, 6,1) layout_rsa_main.addWidget(self.button_rsa_generer, 3,1) self.rsa.setLayout(layout_rsa_main) self.button_rsa_generer.connect(self.button_rsa_generer, SIGNAL("clicked(bool)"), self.rsa_generer) self.button_rsa_generer.connect(self.button_rsa_crypter, SIGNAL("clicked(bool)"), self.rsa_crypt) self.button_rsa_generer.connect(self.button_rsa_decrypter, SIGNAL("clicked(bool)"), self.rsa_decrypt) #Largonjem self.label_largonjem_normal = QLabel("Texte à crypter".decode("utf-8")) self.label_largonjem_crypter = QLabel("Texte crypté".decode("utf-8")) self.text_edit_largonjem_normal = QTextEdit("abc") self.text_edit_largonjem_crypter = QTextEdit() self.button_largonjem_crypt = QPushButton("Crypter") layout_largonjem_principal = QGridLayout() layout_largonjem_principal.addWidget(self.label_largonjem_normal, 0, 0) layout_largonjem_principal.addWidget(self.text_edit_largonjem_normal, 1, 0) layout_largonjem_principal.addWidget(self.label_largonjem_crypter, 0, 1) layout_largonjem_principal.addWidget(self.text_edit_largonjem_crypter, 1 , 1) layout_largonjem_principal.addWidget(self.button_largonjem_crypt) self.largonjem.setLayout(layout_largonjem_principal) self.button_largonjem_crypt.connect(self.button_largonjem_crypt, SIGNAL("clicked(bool)"), self.LargonjemCrypt) self.largonjem_instance = Largonjem() #Cesar self.cesar_instance = Cesar() self.label_cesar_decalage = QLabel("Decalage") self.label_cesar_cle = QLabel("Clé".decode("utf-8")) self.label_cesar_crypt = QLabel("Texte a crypter") self.label_cesar_decrypt = QLabel("Texte crypté".decode("utf-8")) self.text_edit_cesar_crypt = QTextEdit("abc") self.text_edit_cesar_decrypt = QTextEdit() self.line_edit_cesar_decalage = QLineEdit("9") self.line_edit_cesar_cle = QLineEdit("0") self.button_cesar_crypt = QPushButton("Crypter par décalage".decode("utf-8")) self.button_cesar_crypt_bis = QPushButton("Crypter par clé".decode("utf-8")) self.button_cesar_decrypt = QPushButton("Décrypter par décalage".decode("utf-8")) self.button_cesar_decrypt_bis = QPushButton("Décrypter par clé".decode("utf-8")) layout_cesar_principal = QGridLayout() layout_cesar_principal.addWidget(self.label_cesar_decalage, 0, 0) layout_cesar_principal.addWidget(self.line_edit_cesar_decalage, 0, 1) layout_cesar_principal.addWidget(self.label_cesar_cle,1 , 0) layout_cesar_principal.addWidget(self.line_edit_cesar_cle, 1, 1) layout_cesar_principal.addWidget(self.label_cesar_crypt, 2, 0) layout_cesar_principal.addWidget(self.text_edit_cesar_crypt, 3, 0) layout_cesar_principal.addWidget(self.label_cesar_decrypt, 2, 1) layout_cesar_principal.addWidget(self.text_edit_cesar_decrypt, 3, 1) layout_cesar_principal.addWidget(self.button_cesar_crypt, 4, 0) layout_cesar_principal.addWidget(self.button_cesar_crypt_bis , 4 , 1) layout_cesar_principal.addWidget(self.button_cesar_decrypt, 5, 0) layout_cesar_principal.addWidget(self.button_cesar_decrypt_bis , 5 ,1) self.cesar.setLayout(layout_cesar_principal) self.button_cesar_crypt.connect(self.button_cesar_crypt, SIGNAL("clicked(bool)"), self.CesarCryptDecalage) self.button_cesar_crypt_bis.connect(self.button_cesar_crypt_bis, SIGNAL("clicked(bool)"), self.CesarCryptCle) self.button_cesar_decrypt.connect(self.button_cesar_decrypt, SIGNAL("clicked(bool)"), self.CesarDecryptDecalage) self.button_cesar_decrypt_bis.connect(self.button_cesar_decrypt_bis, SIGNAL("clicked(bool)"), self.CesarDecryptCle) #ElGamal self.el = Elgamal() self.label_bits = QLabel("Taille de la cle : ") self.label_premier = QLabel("Nombre premier : ") self.label_tour = QLabel("Nombre de tours : ") self.label_clePrive = QLabel("Clée Privé : ".decode("utf-8")) self.label_clePublic = QLabel("Clée Public : ".decode("utf-8")) self.label_a = QLabel("Nombre Aleatoire a : ") self.label_g = QLabel("Nombre Aleatoire g : ") self.label_origine = QLabel("Texte à crypter".decode("utf-8")) self.label_ascii = QLabel("Texte en ASCII") self.label_crypter = QLabel("Texte crypter ") self.label_decrypter = QLabel("Texte décrypter".decode("utf-8")) self.label_error_elgamal = QLabel("") self.line_edit_bits = QLineEdit("32") self.line_edit_premier = QLineEdit() self.line_edit_tour = QLineEdit("20") self.line_edit_clePrive = QLineEdit() self.line_edit_clePublic = QLineEdit() self.line_edit_a = QLineEdit() self.line_edit_g = QLineEdit() self.text_edit_origine = QTextEdit() self.text_edit_ascii = QTextEdit() self.text_edit_crypter = QTextEdit() self.text_edit_decrypter = QTextEdit() self.bouton_crypter = QPushButton("Crypter") self.bouton_decrypter = QPushButton("Décrypter".decode("utf-8")) self.bouton_generer = QPushButton("Générer".decode("utf-8")) layout_elgamal_principal = QGridLayout() layout_elgamal_principal.addWidget(self.label_bits, 0, 0) layout_elgamal_principal.addWidget(self.line_edit_bits, 0, 1) layout_elgamal_principal.addWidget(self.label_tour, 1, 0) layout_elgamal_principal.addWidget(self.line_edit_tour, 1, 1) layout_elgamal_principal.addWidget(self.label_premier , 2, 0) layout_elgamal_principal.addWidget(self.line_edit_premier ,2, 1) layout_elgamal_principal.addWidget(self.label_clePublic, 3,0) layout_elgamal_principal.addWidget(self.line_edit_clePublic, 3, 1) layout_elgamal_principal.addWidget(self.label_clePrive, 4, 0) layout_elgamal_principal.addWidget(self.line_edit_clePrive, 4, 1) layout_elgamal_principal.addWidget(self.label_a, 0, 2) layout_elgamal_principal.addWidget(self.line_edit_a, 0, 3) layout_elgamal_principal.addWidget(self.label_g, 1, 2) layout_elgamal_principal.addWidget(self.line_edit_g, 1, 3) layout_elgamal_principal.addWidget(self.label_origine, 5, 0, 1, 2) layout_elgamal_principal.addWidget(self.text_edit_origine, 6, 0, 1 , 2) layout_elgamal_principal.addWidget(self.label_ascii, 5, 2, 1, 2) layout_elgamal_principal.addWidget(self.text_edit_ascii , 6 ,2, 1, 2) layout_elgamal_principal.addWidget(self.label_crypter , 7, 0, 1, 2) layout_elgamal_principal.addWidget(self.text_edit_crypter, 8, 0, 1, 2) layout_elgamal_principal.addWidget(self.label_decrypter, 7, 2, 1, 2) layout_elgamal_principal.addWidget(self.text_edit_decrypter, 8, 2, 1, 2) layout_elgamal_principal.addWidget(self.bouton_generer, 2 , 2, 1 , 2) layout_elgamal_principal.addWidget(self.bouton_crypter, 3, 2 ,1 ,2) layout_elgamal_principal.addWidget(self.bouton_decrypter , 4, 2, 1, 2) layout_elgamal_principal.addWidget(self.label_error_elgamal, 9, 0, 1, 4) self.bouton_generer.connect(self.bouton_generer, SIGNAL("clicked(bool)"), self.GenererElgamal) self.bouton_crypter.connect(self.bouton_crypter, SIGNAL("clicked(bool)"), self.CrypterElgamal) self.bouton_decrypter.connect(self.bouton_decrypter, SIGNAL("clicked(bool)"), self.DecrypterElgamal) self.elgamal.setLayout(layout_elgamal_principal) #Eratosthene self.eratos_instance = Eratosthene() self.label_eratos_nombre = QLabel("Maximum") self.line_edit_eratos = QLineEdit("10") self.text_edit_eratos = QTextEdit() self.button_eratos_genere = QPushButton("Générer".decode("utf-8")) layout_erastos_principal = QGridLayout() layout_erastos_principal.addWidget(self.label_eratos_nombre, 0, 0) layout_erastos_principal.addWidget(self.line_edit_eratos, 0, 1) layout_erastos_principal.addWidget(self.button_eratos_genere, 0, 2) layout_erastos_principal.addWidget(self.text_edit_eratos, 1, 0, 1, 2) self.eratos.setLayout(layout_erastos_principal) self.button_eratos_genere.connect(self.button_eratos_genere, SIGNAL("clicked(bool)"), self.GenererEratos) #SHA1 self.label_sha_message = QLabel("Message") self.label_sha_crypter = QLabel("Message Crypter") self.text_edit_sha_message = QTextEdit() self.text_edit_sha_decrypter = QTextEdit() self.button_sha_hascher = QPushButton("Hascher") layout_sha_principal = QGridLayout() layout_sha_principal.addWidget(self.label_sha_message, 0, 0) layout_sha_principal.addWidget(self.text_edit_sha_message, 1, 0) layout_sha_principal.addWidget(self.label_sha_crypter , 0, 1) layout_sha_principal.addWidget(self.text_edit_sha_decrypter, 1, 1) layout_sha_principal.addWidget(self.button_sha_hascher, 2, 0, 1, 2) self.button_sha_hascher.connect(self.button_sha_hascher, SIGNAL("clicked(bool)"), self.HascherSHA) self.sha.setLayout(layout_sha_principal) #Mise en place des QWidgets dans les onglets self.onglet.addTab(self.largonjem, "Largonjem") self.onglet.addTab(self.cesar, "Cesar") self.onglet.addTab(self.elgamal, "ElGamal") self.onglet.addTab(self.eratos, "Eratosthene") self.onglet.addTab(self.sha, "SHA1") self.onglet.addTab(self.rsa, "RSA") principale = QVBoxLayout() principale.addWidget(self.onglet) self.setLayout(principale)
class Rassemblement(QWidget): def __init__(self, parent=None): # constructeur de l'objet QWidget.__init__(self, parent) self.onglet = QTabWidget() #Consctructeur des onglets self.largonjem = QWidget() #QWidget largonjem //OPE self.cesar = QWidget() #QWidget Cesar //OPE self.elgamal = QWidget() #QWidget elgamal //OPE self.eratos = QWidget() #QWidget eratos //OPE self.divers = QWidget() #QWidget Chinois && Wilson //OPE self.sha = QWidget() #QWidget sha //OPE self.rsa = QWidget() #QWidget rsa //OPE #rsa self.label_rsa_cle_public = QLabel(self.trUtf8("Clé public")) self.label_rsa_cle_prive = QLabel(self.trUtf8("Clé privée")) self.label_rsa_module = QLabel(self.trUtf8("Module")) self.edit_rsa_public = QLineEdit() self.edit_rsa_privee = QLineEdit() self.edit_rsa_module = QLineEdit() self.label_text_edit_rsa_decrypt = QLabel(self.trUtf8("Texte à crypter : ")) self.label_text_edit_rsa_crypt = QLabel(self.trUtf8("Texte à décrypter : ")) self.text_edit_rsa_decrypt = QTextEdit("abc") self.text_edit_rsa_crypt = QTextEdit() self.button_rsa_crypter = QPushButton("Crypter") self.button_rsa_decrypter = QPushButton("Decrypter") self.button_rsa_generer = QPushButton(self.trUtf8("Génerer")) layout_rsa_main = QGridLayout() layout_rsa_main.addWidget(self.label_rsa_cle_public, 0,0) layout_rsa_main.addWidget(self.label_rsa_cle_prive, 1,0) layout_rsa_main.addWidget(self.label_rsa_module, 2,0) layout_rsa_main.addWidget(self.edit_rsa_public, 0,1) layout_rsa_main.addWidget(self.edit_rsa_privee, 1, 1) layout_rsa_main.addWidget(self.edit_rsa_module, 2,1) layout_rsa_main.addWidget(self.label_text_edit_rsa_decrypt, 4,0) layout_rsa_main.addWidget(self.label_text_edit_rsa_crypt, 4,1) layout_rsa_main.addWidget(self.text_edit_rsa_decrypt, 5,0) layout_rsa_main.addWidget(self.text_edit_rsa_crypt, 5,1) layout_rsa_main.addWidget(self.button_rsa_crypter, 6,0) layout_rsa_main.addWidget(self.button_rsa_decrypter, 6,1) layout_rsa_main.addWidget(self.button_rsa_generer, 3,1) self.rsa.setLayout(layout_rsa_main) self.button_rsa_generer.connect(self.button_rsa_generer, SIGNAL("clicked(bool)"), self.rsa_generer) self.button_rsa_generer.connect(self.button_rsa_crypter, SIGNAL("clicked(bool)"), self.rsa_crypt) self.button_rsa_generer.connect(self.button_rsa_decrypter, SIGNAL("clicked(bool)"), self.rsa_decrypt) #Largonjem self.label_largonjem_normal = QLabel("Texte à crypter".decode("utf-8")) self.label_largonjem_crypter = QLabel("Texte crypté".decode("utf-8")) self.text_edit_largonjem_normal = QTextEdit("abc") self.text_edit_largonjem_crypter = QTextEdit() self.button_largonjem_crypt = QPushButton("Crypter") layout_largonjem_principal = QGridLayout() layout_largonjem_principal.addWidget(self.label_largonjem_normal, 0, 0) layout_largonjem_principal.addWidget(self.text_edit_largonjem_normal, 1, 0) layout_largonjem_principal.addWidget(self.label_largonjem_crypter, 0, 1) layout_largonjem_principal.addWidget(self.text_edit_largonjem_crypter, 1 , 1) layout_largonjem_principal.addWidget(self.button_largonjem_crypt) self.largonjem.setLayout(layout_largonjem_principal) self.button_largonjem_crypt.connect(self.button_largonjem_crypt, SIGNAL("clicked(bool)"), self.LargonjemCrypt) self.largonjem_instance = Largonjem() #Cesar self.cesar_instance = Cesar() self.label_cesar_decalage = QLabel("Decalage") self.label_cesar_cle = QLabel("Clé".decode("utf-8")) self.label_cesar_crypt = QLabel("Texte a crypter") self.label_cesar_decrypt = QLabel("Texte crypté".decode("utf-8")) self.text_edit_cesar_crypt = QTextEdit("abc") self.text_edit_cesar_decrypt = QTextEdit() self.line_edit_cesar_decalage = QLineEdit("9") self.line_edit_cesar_cle = QLineEdit("0") self.button_cesar_crypt = QPushButton("Crypter par décalage".decode("utf-8")) self.button_cesar_crypt_bis = QPushButton("Crypter par clé".decode("utf-8")) self.button_cesar_decrypt = QPushButton("Décrypter par décalage".decode("utf-8")) self.button_cesar_decrypt_bis = QPushButton("Décrypter par clé".decode("utf-8")) layout_cesar_principal = QGridLayout() layout_cesar_principal.addWidget(self.label_cesar_decalage, 0, 0) layout_cesar_principal.addWidget(self.line_edit_cesar_decalage, 0, 1) layout_cesar_principal.addWidget(self.label_cesar_cle,1 , 0) layout_cesar_principal.addWidget(self.line_edit_cesar_cle, 1, 1) layout_cesar_principal.addWidget(self.label_cesar_crypt, 2, 0) layout_cesar_principal.addWidget(self.text_edit_cesar_crypt, 3, 0) layout_cesar_principal.addWidget(self.label_cesar_decrypt, 2, 1) layout_cesar_principal.addWidget(self.text_edit_cesar_decrypt, 3, 1) layout_cesar_principal.addWidget(self.button_cesar_crypt, 4, 0) layout_cesar_principal.addWidget(self.button_cesar_crypt_bis , 4 , 1) layout_cesar_principal.addWidget(self.button_cesar_decrypt, 5, 0) layout_cesar_principal.addWidget(self.button_cesar_decrypt_bis , 5 ,1) self.cesar.setLayout(layout_cesar_principal) self.button_cesar_crypt.connect(self.button_cesar_crypt, SIGNAL("clicked(bool)"), self.CesarCryptDecalage) self.button_cesar_crypt_bis.connect(self.button_cesar_crypt_bis, SIGNAL("clicked(bool)"), self.CesarCryptCle) self.button_cesar_decrypt.connect(self.button_cesar_decrypt, SIGNAL("clicked(bool)"), self.CesarDecryptDecalage) self.button_cesar_decrypt_bis.connect(self.button_cesar_decrypt_bis, SIGNAL("clicked(bool)"), self.CesarDecryptCle) #ElGamal self.el = Elgamal() self.label_bits = QLabel("Taille de la cle : ") self.label_premier = QLabel("Nombre premier : ") self.label_tour = QLabel("Nombre de tours : ") self.label_clePrive = QLabel("Clée Privé : ".decode("utf-8")) self.label_clePublic = QLabel("Clée Public : ".decode("utf-8")) self.label_a = QLabel("Nombre Aleatoire a : ") self.label_g = QLabel("Nombre Aleatoire g : ") self.label_origine = QLabel("Texte à crypter".decode("utf-8")) self.label_ascii = QLabel("Texte en ASCII") self.label_crypter = QLabel("Texte crypter ") self.label_decrypter = QLabel("Texte décrypter".decode("utf-8")) self.label_error_elgamal = QLabel("") self.line_edit_bits = QLineEdit("32") self.line_edit_premier = QLineEdit() self.line_edit_tour = QLineEdit("20") self.line_edit_clePrive = QLineEdit() self.line_edit_clePublic = QLineEdit() self.line_edit_a = QLineEdit() self.line_edit_g = QLineEdit() self.text_edit_origine = QTextEdit() self.text_edit_ascii = QTextEdit() self.text_edit_crypter = QTextEdit() self.text_edit_decrypter = QTextEdit() self.bouton_crypter = QPushButton("Crypter") self.bouton_decrypter = QPushButton("Décrypter".decode("utf-8")) self.bouton_generer = QPushButton("Générer".decode("utf-8")) layout_elgamal_principal = QGridLayout() layout_elgamal_principal.addWidget(self.label_bits, 0, 0) layout_elgamal_principal.addWidget(self.line_edit_bits, 0, 1) layout_elgamal_principal.addWidget(self.label_tour, 1, 0) layout_elgamal_principal.addWidget(self.line_edit_tour, 1, 1) layout_elgamal_principal.addWidget(self.label_premier , 2, 0) layout_elgamal_principal.addWidget(self.line_edit_premier ,2, 1) layout_elgamal_principal.addWidget(self.label_clePublic, 3,0) layout_elgamal_principal.addWidget(self.line_edit_clePublic, 3, 1) layout_elgamal_principal.addWidget(self.label_clePrive, 4, 0) layout_elgamal_principal.addWidget(self.line_edit_clePrive, 4, 1) layout_elgamal_principal.addWidget(self.label_a, 0, 2) layout_elgamal_principal.addWidget(self.line_edit_a, 0, 3) layout_elgamal_principal.addWidget(self.label_g, 1, 2) layout_elgamal_principal.addWidget(self.line_edit_g, 1, 3) layout_elgamal_principal.addWidget(self.label_origine, 5, 0, 1, 2) layout_elgamal_principal.addWidget(self.text_edit_origine, 6, 0, 1 , 2) layout_elgamal_principal.addWidget(self.label_ascii, 5, 2, 1, 2) layout_elgamal_principal.addWidget(self.text_edit_ascii , 6 ,2, 1, 2) layout_elgamal_principal.addWidget(self.label_crypter , 7, 0, 1, 2) layout_elgamal_principal.addWidget(self.text_edit_crypter, 8, 0, 1, 2) layout_elgamal_principal.addWidget(self.label_decrypter, 7, 2, 1, 2) layout_elgamal_principal.addWidget(self.text_edit_decrypter, 8, 2, 1, 2) layout_elgamal_principal.addWidget(self.bouton_generer, 2 , 2, 1 , 2) layout_elgamal_principal.addWidget(self.bouton_crypter, 3, 2 ,1 ,2) layout_elgamal_principal.addWidget(self.bouton_decrypter , 4, 2, 1, 2) layout_elgamal_principal.addWidget(self.label_error_elgamal, 9, 0, 1, 4) self.bouton_generer.connect(self.bouton_generer, SIGNAL("clicked(bool)"), self.GenererElgamal) self.bouton_crypter.connect(self.bouton_crypter, SIGNAL("clicked(bool)"), self.CrypterElgamal) self.bouton_decrypter.connect(self.bouton_decrypter, SIGNAL("clicked(bool)"), self.DecrypterElgamal) self.elgamal.setLayout(layout_elgamal_principal) #Eratosthene self.eratos_instance = Eratosthene() self.label_eratos_nombre = QLabel("Maximum") self.line_edit_eratos = QLineEdit("10") self.text_edit_eratos = QTextEdit() self.button_eratos_genere = QPushButton("Générer".decode("utf-8")) layout_erastos_principal = QGridLayout() layout_erastos_principal.addWidget(self.label_eratos_nombre, 0, 0) layout_erastos_principal.addWidget(self.line_edit_eratos, 0, 1) layout_erastos_principal.addWidget(self.button_eratos_genere, 0, 2) layout_erastos_principal.addWidget(self.text_edit_eratos, 1, 0, 1, 2) self.eratos.setLayout(layout_erastos_principal) self.button_eratos_genere.connect(self.button_eratos_genere, SIGNAL("clicked(bool)"), self.GenererEratos) #SHA1 self.label_sha_message = QLabel("Message") self.label_sha_crypter = QLabel("Message Crypter") self.text_edit_sha_message = QTextEdit() self.text_edit_sha_decrypter = QTextEdit() self.button_sha_hascher = QPushButton("Hascher") layout_sha_principal = QGridLayout() layout_sha_principal.addWidget(self.label_sha_message, 0, 0) layout_sha_principal.addWidget(self.text_edit_sha_message, 1, 0) layout_sha_principal.addWidget(self.label_sha_crypter , 0, 1) layout_sha_principal.addWidget(self.text_edit_sha_decrypter, 1, 1) layout_sha_principal.addWidget(self.button_sha_hascher, 2, 0, 1, 2) self.button_sha_hascher.connect(self.button_sha_hascher, SIGNAL("clicked(bool)"), self.HascherSHA) self.sha.setLayout(layout_sha_principal) #Mise en place des QWidgets dans les onglets self.onglet.addTab(self.largonjem, "Largonjem") self.onglet.addTab(self.cesar, "Cesar") self.onglet.addTab(self.elgamal, "ElGamal") self.onglet.addTab(self.eratos, "Eratosthene") self.onglet.addTab(self.sha, "SHA1") self.onglet.addTab(self.rsa, "RSA") principale = QVBoxLayout() principale.addWidget(self.onglet) self.setLayout(principale) ### FONCTION RSA def rsa_generer(self): a = 9999999999999999999999999999999999999999999999999999999999999999999999999999999 b = 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 clefPublic,clefPrivee = genererClefs(a,b) self.edit_rsa_public.setText(str(clefPublic[0])) self.edit_rsa_privee.setText(str(clefPrivee[0])) self.edit_rsa_module.setText(str(clefPublic[1])) def rsa_crypt(self): if((len(self.edit_rsa_public.text()) <= 0) and (len(self.edit_rsa_privee.text()) <= 0) and (len(self.edit_rsa_module.text()) <= 0)): self.rsa_generer() self.text_edit_rsa_crypt.setText(str(crypter(str(self.text_edit_rsa_decrypt.toPlainText()),\ (int(self.edit_rsa_public.text()),int(self.edit_rsa_module.text()))))) def rsa_decrypt(self): print (int(self.edit_rsa_privee.text()),int(self.edit_rsa_module.text())) if not((len(self.edit_rsa_public.text()) <= 0) and (len(self.edit_rsa_privee.text()) <= 0) and (len(self.edit_rsa_module.text()) <= 0)): self.text_edit_rsa_decrypt.setText(str(decrypter(int(self.text_edit_rsa_crypt.toPlainText()),\ (int(self.edit_rsa_privee.text()),\ int(self.edit_rsa_module.text()))\ ))) #### FONCTION ELGAMAL def GenererElgamal(self): if((len(self.line_edit_tour.text()) > 0) and (int(self.line_edit_bits.text()) > 0)): print self.line_edit_bits.text().toInt()[0] self.el.setTailleCle(int(self.line_edit_bits.text().toInt()[0])) self.el.setTour(int(self.line_edit_tour.text())) print "taille " , self.el.getTailleCle() self.el.generer() self.line_edit_premier.setText(str(self.el.p)) self.line_edit_clePrive.setText(str(self.el.cle_prive)) self.line_edit_clePublic.setText(str(self.el.cle_public)) self.line_edit_a.setText(str(self.el.a)) self.line_edit_g.setText(str(self.el.g)) else : self.label_error_elgamal.setText("Erreur : ajouter un nombre de bits et indiquer le nombre de tours ! ".decode("utf-8")) def CrypterElgamal(self): if(len(self.text_edit_origine.toPlainText()) > 0 ): self.txt = QString(self.text_edit_origine.toPlainText()) self.el.setTextOrigine(unicode(self.text_edit_origine.toPlainText())) self.el.crypter() self.text_edit_ascii.setText(self.el.text_ascii) self.text_edit_crypter.setText(self.el.text_crypter) else : self.label_error_elgamal.setText("Erreur : veuillez mettre un texte à crypter ".decode("utf-8")) def DecrypterElgamal(self): if(len(str(self.text_edit_crypter.toPlainText()))>0): self.el.text_origine = str(self.text_edit_crypter.toPlainText()) self.el.decrypter() strId = QString(self.el.text_decrypter) self.text_edit_decrypter.setText(strId) else : self.label_error_elgamal.setText("Rien à decrypter".decode("utf-8")) #### FONCTION LARGONJEM def LargonjemCrypt(self): self.largonjem_instance.setText(str(self.text_edit_largonjem_normal.toPlainText())) self.largonjem_instance.crypter() self.text_edit_largonjem_crypter.setText(str(self.largonjem_instance.getTextCrypter())) #Algorithme de cryptage de cesar avec simple decalage ou clé def CesarCryptDecalage(self): self.cesar_instance.setText(str(self.text_edit_cesar_crypt.toPlainText())) self.cesar_instance.setDecalage(int(self.line_edit_cesar_decalage.text())) self.cesar_instance.CrypterDecalage() self.text_edit_cesar_decrypt.setText(str(self.cesar_instance.getTextCrypter())) def CesarCryptCle(self): self.cesar_instance.setText(str(self.text_edit_cesar_crypt.toPlainText())) self.cesar_instance.setCle(int(self.line_edit_cesar_cle.text())) self.cesar_instance.CrypterCle() self.text_edit_cesar_decrypt.setText(str(self.cesar_instance.getTextCrypter())) def CesarDecryptCle(self): self.cesar_instance.setTextDecrypter(str(self.text_edit_cesar_decrypt.toPlainText())) self.cesar_instance.setCle(int(self.line_edit_cesar_cle.text())) self.cesar_instance.DecrypterCle() self.text_edit_cesar_crypt.setText(str(self.cesar_instance.getText())) def CesarDecryptDecalage(self): self.cesar_instance.setTextDecrypter(str(self.text_edit_cesar_decrypt.toPlainText())) self.cesar_instance.setDecalage(int(self.line_edit_cesar_decalage.text())) self.cesar_instance.DecrypterDecalage() self.text_edit_cesar_crypt.setText(str(self.cesar_instance.getText())) ##### FONCTION ERATOSTHENE def GenererEratos(self): self.eratos_instance.setNombre(int(self.line_edit_eratos.text())) self.eratos_instance.Generer() self.text_edit_eratos.setText(str(self.eratos_instance.getListe())) ###### FONCTION SHA def HascherSHA(self): text = self.text_edit_sha_message.toPlainText() self.sha_instance = sha1() self.text_edit_sha_decrypter.setText(self.sha_instance.sha1(text))
import Cesar, RailFence import hashlib from Main_Encriptacion import HashTextoPlano, TextoPlano, N_Cesar, NivelesRailFence #Se exporta el hash del texto plano y los niveles de Cesar y RailFence TextoDescrifrar = open( 'mensajeseguro.txt', 'r+') #Txt que contiene el texto encriptado por 2 cifrados de sustitución TextoEncriptado = TextoDescrifrar.readlines()[0] TextoDescrifrar.close() DescifrarRailFence = RailFence.Desencriptar( TextoEncriptado, NivelesRailFence) #Descrifrado por RailFence DescifradoCesar = Cesar.Rot(-N_Cesar)( DescifrarRailFence) #Descifrado por Cesar #Metodo para Hashear el texto descrifrado HashTextoDescifrado = hashlib.md5() textoAHashear = DescifradoCesar HashTextoDescifrado.update(textoAHashear.encode()) HashTextoDescencriptado = HashTextoDescifrado.hexdigest() #Validador si el hash del texto plano es el mismo que el texto descrifrado print("=================================================") if HashTextoPlano == HashTextoDescencriptado: print("El mensaje no ha sido modificado") else: print("El mensaje ha sido adulterado") print("=================================================") print("Mensaje Original:", TextoPlano)
import Util import Cesar import Vigenere import Transposicao import Substituicao import QuebrarCifras import AtaqueDicionario fileName = "./entrada.txt" option = Util.menuAlgoritmo() while option != 0: if option == 1: Cesar.start(fileName) elif option == 2: Transposicao.start(fileName) elif option == 3: Vigenere.start(fileName) elif option == 4: Substituicao.start(fileName) elif option == 5: nomeArquivo = Util.scan("Arquivo: ") QuebrarCifras.quebrarCifra(nomeArquivo) elif option == 6: nomeArquivo = Util.scan("Arquivo: ") AtaqueDicionario.startAttack(nomeArquivo) option = Util.menuAlgoritmo()
import Cesar, RailFence import hashlib TextoACifrar = open('mensajedeentrada.txt', 'r') #Txt que contiene el texto plano TextoPlano = TextoACifrar.readlines()[0] #Extrae el texto plano del archivo TextoACifrar.close() #Aplicación del Hash md5 al texto plano TextoHash = hashlib.md5() textoAHashear = TextoPlano TextoHash.update(textoAHashear.encode()) HashTextoPlano = TextoHash.hexdigest() N_Cesar = 5 #Nro de veces de Cesar NivelesRailFence = 3 #Nro de bajas en Rail Fence TextoCesar = Cesar.Rot(N_Cesar)(TextoPlano) #Texto cifrado con Cesar TextoRailFence = RailFence.Encriptar( TextoCesar, NivelesRailFence) #Texto cifrado por RailFence archivoHashear = open('mensajeseguro.txt', 'w') archivoHashear.write(TextoRailFence) archivoHashear.close() print("=================================================") print("Mensaje Original:", TextoPlano) print("Mensaje Encriptado:", TextoRailFence)
""" Desafio: Se le solicita a usted crear un programa el cual tenga como objetivo poder enviar un mensaje seguro asegurando la integridad de este sin que este sea modificado, para esto se le pide a su equipo que construya en el lenguaje que desee un programa que sea capas de cifrar ocupando cualquier red de sustitucion que usted defina y generar un hash de un archivo de texto llamado mensajedeentrada.txt generando un nuevo archivo llamado mensajeseguro.txt en el cual posteriormente puedan con un segundo programa generar la operacion a la inversa, generando el mismo mensaje original con el adicional de poder detectar si el mensaje ha sido modificado o no. """ Texto = "Hola Mundo ñoño" Nivel_RF = 2 #Encriptado y desencriptado Cesar Cesar_Encrypt = Cesar.Rot(3)(Texto) print(Cesar_Encrypt) print(Cesar.Rot(-3)(Cesar_Encrypt)) #Encriptado y desencriptado Rail Fence RF_Encrypt = RailFence.Encriptar(Texto, Nivel_RF) print(RF_Encrypt) print(RailFence.Desencriptar(RF_Encrypt, Nivel_RF)) ############################################################### hashmd5 = hashlib.md5() stexto = "hola Altaruru, hoy es lunes 1 de Octubre de 2018" hashmd5.update(stexto.encode()) print(hashmd5.hexdigest())