def ElgamalDecy(encyseg,key): shpseg = np.shape(encyseg) decysegmnt = np.zeros([shpseg[0], shpseg[1]]) for i in range(0, shpseg[0]): for j in range(0, shpseg[1]): decysegmnt[i, j] = elgml.decrypt(key, encyseg[i, j]) return decysegmnt encysegmnt = np.empty((shpseg[0], shpseg[1]), dtype=object) for i in range(0, shpseg[0]): for j in range(0, shpseg[1]): encysegmnt[i, j] = elgml.encrypt(key, str(imgseg[i, j])) return encysegmnt
def ElgamalEncy(imgseg,key): shpseg=np.shape(imgseg) encysegmnt = np.empty((shpseg[0], shpseg[1]), dtype=object) for i in range(0,shpseg[0]): for j in range(0, shpseg[1]): encysegmnt[i,j]=elgml.encrypt(key,str(imgseg[i,j])) return encysegmnt
def generate_prime(self, event): self.m_button4.Disable() num = self.m_textCtrl17.GetValue() if num == "": dlg = wx.MessageDialog(None, "Please Enter a number!", "Error") dlg.ShowModal() dlg.Destroy() return self.m_button2.Disable() self.m_button2.SetLabel(u"Generating...") q = Elgamal.generate_q(num) p = Elgamal.generate_p(q) a = Elgamal.primitive(q) self.m_textCtrl3.write(p) self.m_textCtrl7.write(a) self.m_button2.Enable() self.m_button2.SetLabel(u"Generate p,a") self.m_button4.Enable()
def generate_cipher(self, event): plain = self.m_textCtrl5.GetValue() a = self.m_textCtrl6.GetValue() p = self.m_textCtrl7.GetValue() k = Elgamal.generate_random(p) pub = self.m_textCtrl9.GetValue() if a == "" or plain == "" or p == "" or pub == "": dlg = wx.MessageDialog(None, "Please Enter a value!", "Error") dlg.ShowModal() dlg.Destroy() return self.m_button2.Disable() self.m_button2.SetLabel(u"Encrypting...") cipher_1 = Elgamal.get_cipher_1(a, k, p) self.m_textCtrl10.write(cipher_1) for plain_letter in plain: cipher_2 = Elgamal.get_cipher_2(pub, k, p, plain_letter) self.m_textCtrl11.write(cipher_2) self.m_textCtrl11.write(' ') self.m_button2.Enable() self.m_button2.SetLabel(u"Encrypt")
def decrypt(self, event): c1 = self.m_textCtrl12.GetValue() c2 = self.m_textCtrl13.GetValue() c2_list = c2.split() p = self.m_textCtrl14.GetValue() priv = self.m_textCtrl15.GetValue() if c1 == "" or c2 == "" or p == "" or priv == "": dlg = wx.MessageDialog(None, "Please Enter a value!", "Error") dlg.ShowModal() dlg.Destroy() return self.m_button3.Disable() self.m_button3.SetLabel("Decrypting...") for cipher in c2_list: self.m_textCtrl16.write(Elgamal.decrypt(c1, cipher, priv, p)) self.m_button3.Enable() self.m_button3.SetLabel("Decrypt")
def generate_keys(self, event): self.m_button4.Disable() self.m_button4.SetLabel("Generating...") p = self.m_textCtrl3.GetValue() a = self.m_textCtrl7.GetValue() priv = self.m_textCtrl9.GetValue() if priv == "": dlg = wx.MessageDialog(None, "Please Enter a number!", "Error") dlg.ShowModal() dlg.Destroy() self.m_button4.Enable() self.m_button4.SetLabel("Generate Keys") return pub = Elgamal.get_public(a, priv, p) self.m_textCtrl8.write(pub) self.m_button4.Enable() self.m_button4.SetLabel("Generate Keys")
import Elgamal Elgamal.generatekeys()
import Elgamal Elgamal.decrypt(privateKeyFilename = 'my_elgamal_private_key.txt', ciphertextFilename = 'elgamal_encrypted_message.txt')
host = socket.gethostname() #Random port number port = 12345 s = socket.socket() #binds address and port s.bind((host, port)) #listens in up to 2 connections at a time s.listen(2) #Accepts connection to the server conn, addr = s.accept() #Creates keys to be sent to Client once connected p, a, g, ga = Elgamal.generateKey(64) #places keys into a string format seperated by commas publickeys = str(p) + "," + str(g) + "," + str(ga) #sends keys to client conn.send(publickeys.encode()) #collecting public key from client gb = conn.recv(1024).decode() #calculate gab gab = pow(int(gb), a, p) #turn key to string key = gab.to_bytes(32, 'little')
import Elgamal Elgamal.encrypt(publicKeyFilename = 'my_elgamal_public_key.txt', plaintextFilename = 'plaintext.txt')
# Now the transfer of three messages Hello1, Hello2, Hello3 begins msgs = ['Hello1', 'Hello2', 'Hello3'] for _ in range(3): print("I am sending -:", msgs[_]) message = s.recv(2048) message = message.decode() public_key_A, received_mac = message.split("||") computed_mac = HMAC.returnHMAC(key=secret_key_AB_HMAC, message=public_key_A) if (computed_mac != received_mac): print("MAC ERROR") q, alpha, YA = list(map(int, public_key_A.split(" "))) random_int = rint(1, q) K = pow(YA, random_int, q) encrypted_message = Elgamal.encrypt(q, alpha, random_int, K, msgs[_]) message_to_be_sent = encrypted_message + "||" + HMAC.returnHMAC( key=secret_key_AB_HMAC, message=encrypted_message) s.send(str.encode(message_to_be_sent)) s.close()
Print the private key if she's founded Prove that it's important to choose a big random x to prevent attacks :param public_key: the public key tuple ''' q = public_key[0] g = public_key[1] h = public_key[2] for i in range(1, q): if (g ** i) % q == h: print("FOUND !") print("Private key = {}".format(i)) return if __name__== "__main__": alice = Elgamal() bob = Elgamal() # El Gamal for integer print("Integer") message = 5 alice_public_key = alice.publishPublicKey() print("Vous essayer de crypter {}".format(message)) print("la clef publique de alice : {}".format(alice_public_key)) print("l'ordre dy groupe cyclique est : {}".format(alice_public_key[0])) print(alice_public_key) bob_cipher = bob.cipher(alice_public_key, message) print("le crypte : {}".format(bob_cipher)) alice_decrypted = alice.unCipher(bob_cipher) print("le message decrypte {}".format(alice_decrypted))
port = 12345 #this is the socket s = socket.socket() #binds address and port s.bind((host, port)) #listens in up to 2 connections at a time s.listen(2) #Accepts connection to the server conn, addr = s.accept() #Creates keys to be sent to Client once connected p,a,g,ga = Elgamal.generateKey(128) #places keys into a string format seperated by commas publickeys = str(p) + "," + str(g) + "," + str(ga) #sends keys to client conn.send(publickeys.encode()) #collecting public key from client gb = conn.recv(1024).decode() #calculate gab gab = pow(int(gb), a, p) #printing the key for the presentation print("Key: " + str(gab))
def rsamain(imgloc): inLoc = os.path.basename(imgloc) img= cv2.imread(imgloc, 0) print ("Original Image Dimensions: ", img.size) shp = np.shape(img) height = shp[0] width = shp[1] heightindex=closestNumber(height,3) widthindex=closestNumber(width,3) if(height%3!=0): img = cv2.copyMakeBorder(img,0,heightindex,0,0,cv2.BORDER_REPLICATE) if(width%3!=0): img = cv2.copyMakeBorder(img, 0, 0, 0, widthindex, cv2.BORDER_REPLICATE) shp = np.shape(img) height = shp[0] width = shp[1] orignalimg=img start_time = time.time() slic=slice(img) plainslice=np.reshape(slic,[9,1,int(height/3)*int(width/3)]) decimalearray=imagepresteps(plainslice,height,width) elgmlkeys=elgml.generate_keys() elgmlpub=elgmlkeys['publicKey'] elgmlpriv=elgmlkeys['privateKey'] ShareImgs = np.empty((9, int(height/3),int(width/3)), dtype=object) (n, e, d) = rsa.newKey(10**100, 10**101, 50) for i in range(0,9): if(i%2!=0): ShareImgs[i, :, :]=ElgamalEncy(decimalearray[i],elgmlpub) else: ShareImgs[i, :, :] = RSAEncy(decimalearray[i], n,e,8) rsaetime=(time.time() - start_time) print(rsaetime) print("Decryption Started") start_time = time.time() decrypteddecimalarray = np.zeros([9, int(height/3),int(width/3)]) for i in range(0,9): if(i%2!=0): decrypteddecimalarray[i,:,:] =ElgamalDecy(ShareImgs[i],elgmlpriv) else: decrypteddecimalarray[i, :, :] = RSADecy(ShareImgs[i], n,d,8,d) plainslice=np.reshape(decrypteddecimalarray,[9,1,int(height/3)*int(width/3)]) imagepresteps(plainslice,height,width) binimage = converttobin(plainslice) # print(len(binimage[0])) length = int(len(binimage[0]) / 64) + 1 BinaryArrayforPermut = np.zeros([9, length, 64]) for i in range(0, 9): BinaryArrayforPermut[i, :, :] = divideimageblocks(binimage[i]) shparr = np.shape(BinaryArrayforPermut) reversedpermutedarray = np.zeros([shparr[0], shparr[1], shparr[2]]) for i in range(0, 9): reversedpermutedarray[i, :, :] = rversepermutaion(BinaryArrayforPermut[i]) decimalearrayreversepermuted = np.zeros([9, int(height / 3), int(width / 3)]) for i in range(0, 9): temp = converttodecimal(reversedpermutedarray[i]) decimalearrayreversepermuted[i] = np.reshape(temp, [int(height / 3), int(width / 3)]) recoveredimg=reconstructimage(decimalearrayreversepermuted) rsadtime=(time.time() - start_time) print(rsadtime) rsapsnr=(psnr(orignalimg,recoveredimg)) a = ['/static/'+inLoc, '/static/re.png', '/static/rd.png',rsaetime,rsadtime,rsapsnr] rsa_out = open("output.csv",'w+') rsa_out.write('/static/'+inLoc+','+ '/static/share-1.jpg'+','+ '/static/rd.png'+','+str(rsaetime)+','+str(rsadtime)+','+str(rsapsnr)) rsa_out.close() #my = pd.DataFrame(a) #my.to_csv("output.csv",index=False,header=False) return a
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))
XA = rint(1, q - 1) YA = pow(alpha, XA, q) public_key_A = [q, alpha, YA] private_key_A = YA plaintext = str(q) + " " + str(alpha) + " " + str(YA) message = plaintext + '||' + HMAC.returnHMAC(key = secret_key_AB_HMAC, message = plaintext) c.send(str.encode(message)) reply = c.recv(2048).decode() C1, C2, recv_mac = reply.split("||") computed_mac = HMAC.returnHMAC(key = secret_key_AB_HMAC, message = C1 + "||" + C2) if(computed_mac != recv_mac): print("MAC ERROR") decrypted_message = Elgamal.decrypt(q, XA, C1 + "||" + C2) print("I have received this message -",decrypted_message) c.close() s.close()
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)
import socket import HMAC import Elgamal from random import randint as rint # FILE NOT USEFUL, MADE FOR TESTING port = 5000 q = Elgamal.q alpha = Elgamal.alpha XA = rint(1, q - 1) YA = pow(alpha, XA, q) public_key_A = [q, alpha, YA] private_key_A = YA s = socket.socket() s.connect(('127.0.0.1', port)) plaintext = str(q) + " " + str(alpha) + " " + str(YA) message = plaintext s.send(str.encode(message)) encrypted_message = s.recv(1024).decode() decrypted_message = Elgamal.decrypt(q, XA, encrypted_message) print("I GOT THIS MESSAGE :", decrypted_message) s.close()
import Elgamal from random import randint as rint # FILE NOT USEFUL, MADE FOR TESTING port = 5000 q = Elgamal.q alpha = Elgamal.alpha public_key_A = [] random_int = rint(1, q) message_to_sent = '-__-, HEY, HELLO' print("I AM SENDING THIS MESSAGE :", message_to_sent) s = socket.socket() s.bind(('', port)) s.listen() c, addr = s.accept() message = c.recv(1024) message = message.decode() public_key_A = list(map(int, message.split(" "))) K = pow(public_key_A[2], random_int, q) encrypted_message = Elgamal.encrypt(q, alpha, random_int, K, message_to_sent) print(encrypted_message) c.send(str.encode(encrypted_message)) s.close()