sam1902

XOR crypt V3 With UI Français [CLEARER]

Jan 8th, 2018
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.23 KB | None | 0 0
  1. from tkinter import *
  2.  
  3. def xorCrypt(eventSender):
  4.     # Convertis le message et la clef en tableaux de caractères
  5.     msg = list(    inputEntry.get()    )
  6.     key = list(    keyEntry.get()      )
  7.  
  8.     # Répete le message ou la clef pour qu'ils correspondent à la taille du plus grand tel que len(msg) = len(key)
  9.     msg, key = extrapolateLen(msg, key)
  10.  
  11.     # Crée un tableau contenant dans chaque case le numero du caractère du message dans la table Unicode
  12.     msgCharOrds = []
  13.     for c in msg:
  14.         msgCharOrds.append(ord(c))
  15.     # Même chose pour la clef
  16.     keyCharOrds = []
  17.     for c in key:
  18.         keyCharOrds.append(ord(c))
  19.  
  20.     # Vérifie si le message est à déjà été encrypté
  21.     encrypted = checkIfMessageEncrypted(msgCharOrds)
  22.     outputStr = ""
  23.    
  24.     # Si non encrypté, encryptons le
  25.     if not encrypted:
  26.         # Prends un à un chaque numero de caractère depuis les tableaux msgCharOrds et keyCharOrds
  27.         # Ex: msgCharOrds = [1,2,3,4] et keyCharOrds = [5,6,7,8]
  28.         # à chaque boucle (msgC, keyC) = (1,5)
  29.         # puis            (msgC, keyC) = (2,6)
  30.         # puis            (msgC, keyC) = (3,7)
  31.         # et enfin        (msgC, keyC) = (4,8)
  32.         for msgC, keyC in zip(msgCharOrds, keyCharOrds):
  33.             xor = msgC ^ keyC  # XOR le nombre msgC et keyC et le sauve dans la variable xor
  34.             xor = xor + 1000   # Ajoute 1000 à la variable XOR
  35.             charXor = chr(xor) # Trouve le caractère dans la table Unicode correspondant au nombre dans la variable xor
  36.             outputStr = outputStr + charXor # Ajoute le caractère nouvellement obtenu à la chaîne de caractère finale qui sera affiché
  37.  
  38.         outputStr = outputStr[:len(msg)] # Raccourcis la chaîne de caractère final à la taille du message original au cas ou
  39.     # Si le message est déjà encrypté, décryptons le ==> faire toute les opérations à l'envers
  40.     else:
  41.         for msgC, keyC in zip(msgCharOrds, keyCharOrds): # Même chose que lors de l'encryption
  42.             msgC = msgC - 1000 # Enlève 1000 au nombre du caractère du message pour compensé l'ajout lors de l'encryption
  43.             xor = msgC ^ keyC  # XOR de nouveau le nombre du caractère du message encrypté avec le nombre du caractère de la clef
  44.             charXor = chr(xor) # Transforme ce nombre obtenu en caractère
  45.             outputStr = outputStr + charXor # Ajoute le caractère à la chaîne de sortie
  46.  
  47.         outputStr = outputStr[:len(msg)] # Raccourcis la chaîne de caractère final à la taille du message original au cas ou
  48.  
  49.     inputEntry.delete(0, END) # Efface le contenu du champs de text contenant le message de début
  50.     inputEntry.insert(0, outputStr) # Écrit le message nouvellement encrypté/décrypté à la place
  51.  
  52. def checkIfMessageEncrypted(msgCharOrds):
  53.     # Test if message is already encrypted
  54.     encrypted = False
  55.     for msgC in msgCharOrds:
  56.         if msgC > 1000:
  57.             encrypted = True
  58.     return encrypted
  59.  
  60. def extrapolateLen(arrayA, arrayB):
  61.     # Which chain is the smallest ?
  62.     smallestArr = arrayA if len(arrayA) < len(arrayB) else arrayB
  63.  
  64.     minSize = min([len(arrayA), len(arrayB)]) # Lenght of the smallest chain
  65.     maxSize = max([len(arrayA), len(arrayB)]) # Lenght of the largest chain
  66.  
  67.     # Duplicate the smallest chain's characters till both chains have the same lenght
  68.     for i in range(maxSize):
  69.         if i >= minSize:
  70.             smallestArr.append(smallestArr[i-minSize])
  71.     return arrayA, arrayB
  72.  
  73. # Initialise l'instance Tkinter
  74. mainWin = Tk()
  75.  
  76. winWidth        = 800
  77. winHeight       = 130
  78. # Définis les dimensions de la fenêtre et les appliques
  79. mainWin.geometry('{}x{}'.format(winWidth, winHeight))
  80. # Définis le titre de la fenêtre
  81. mainWin.title("XOR Crypt")
  82. # Crée une étiquette avec le text "Message :" et l'ajoute à la fenêtre
  83. l1 = Label(mainWin, text="Message: ")
  84. l1.pack()
  85. # Crée un champ de text qui conteiendra le message, de largeur égale à celle de la fenêtre et l'ajoute
  86. inputEntry = Entry(mainWin, width=winWidth)
  87. inputEntry.pack()
  88. # Insert dans le champ de text un message d'essaie
  89. inputEntry.insert(0, "The quick brown fox jumps over the lazy dog. The dog killed the fox by the power of thunder.")
  90.  
  91. l2 = Label(mainWin, text="Clef: ")
  92. l2.pack()
  93. # Crée un champ de text qui contiendra la clef, de largeur égale à celle de la fenêtre et l'ajoute
  94. keyEntry = Entry(mainWin, width=winWidth)
  95. keyEntry.pack()
  96. # Insert dans le champ de text une clef d'essaie
  97. keyEntry.insert(0, "123456789")
  98. # Crée une étiquette avec les instructions, définis une petite police en italic et l'ajoute à la fenêtre
  99. l3 = Label(mainWin, text="Instructions: Appuyez sur la touche 'Entrer' pour encrypter/décrypter le message à l'aide de la clef",
  100.             font=("Helvetica",10,"normal","italic"))
  101. l3.pack()
  102.  
  103. # /!\ IMPORTANT /!\
  104. # Lie l'action d'appuyer sur la touche "Entrer" (Return en anglais) à la fonction d'encryption
  105. # Lorsque la touche est appuyé, la fonction est appelé.
  106. # bind = verbe "lier"
  107. mainWin.bind("<Return>", xorCrypt)
  108.  
  109. # Lance la boucle d'execution dans le thread principal
  110. mainWin.mainloop()
  111.  
  112.  
  113.  
  114. '''
  115. ### Test run
  116. # Clear msg
  117. msg = list("The quick brown fox jumps over the lazy dog. The dog killed the fox by the power of thunder.")
  118. # Crypted msg
  119. msg = list("этоϼЬЫцукϹиЩуЪрϿцобϺсЩрЮЬЀоЯпЩϼЩцкЀниавϼйсиϾЁэтоϼйсиЀкрцчййϾЫифϹмфдϽмжЀеспϻЬтЩквЁцмϻШхЫсффЫЄ")
  120. # Key
  121. key = list("123456789")
  122. '''
  123. # max index char ever: 1114112
Advertisement
Add Comment
Please, Sign In to add comment