Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- FILE = "C:/Users/Asus/Desktop/GEDEFU.txt"
- charset = ["A", "D", "G", "F","V", "X"]
- french = [" ", "E", "A", "I", "S", "N", "R", "T", "O", "L", "U", "D", "C", "M", "P", "G", "B", "V", "H", "F", "Q", "Y", "X", "K", "W","Z", "1", "9", "6", "2", "8", "3", "4", "5", "7", "0"]
- clef = "PAHMVIN"
- def padding(content):
- if len(content)%2 != 0:
- content += "X"
- return content
- def transposition(key, content):
- matrice, transposition = [[0]*373 for i in range(len(key))], [[0]*len(key) for i in range(373)]
- tab, dic, inter = list(zip(*[iter(content)]*len(key))), {}, []
- i,j = 0, 0
- for i in range(len(key)):
- for j in range(373):
- matrice[i][j] = tab[j][i]
- decomp_key = list(key)
- decomp_key_al = sorted(decomp_key, reverse=True)
- for i in range(len(decomp_key_al)):
- dic[decomp_key_al[i]] = matrice[i]
- for elt in decomp_key:
- inter.append(dic[elt])
- for i in range(len(inter)):
- for j in range(len(transposition)):
- transposition[j][i] = inter[i][j]
- return transposition
- def convertString(array, n, p):
- transpo = ""
- for i in range(n):
- for j in range(p):
- transpo += array[j][i]
- return transpo
- def refe(array):
- ref, i, j = [], 0, 0
- for i in range(len(array)):
- for j in range(len(array)):
- ref.append(array[i]+array[j])
- return ref
- def getblock(content):
- i,solo,block = 0,[], []
- content = padding(content)
- solo = list(content)
- while i != len(solo):
- block.append(solo[i]+solo[i+1])
- i += 2
- return block
- def occurence(block, ref): #Calcule la fréquence d'apparition d'une pair de lettres.
- i, j, count, res = 0, 0, 0, []
- for i in range(len(ref)):
- for j in range(len(block)):
- if block[j] == ref[i]:
- count += 1
- count = round((count*100)/len(block), 2)
- res.append(count)
- count = 0
- return res
- def liste(ref, frequence, french): #Créer une liste avec correspondance.
- liste , i = [], 0
- for i in range(len(ref)):
- elt = ref[i]+":"+str(frequence[i])
- liste.append(elt)
- sub_liste, frequence, i = [], sorted(frequence, reverse=True), 0
- for i in range(len(french)):
- sub_liste.append(liste[i].replace(liste[i][3:], french[i]))
- return sub_liste
- def substitution(block, liste, ref): #Remplace les lettres dans le texte par les lettres de la frequence de la langue (Etape 1 du chiffrement)
- for i in range(len(ref)):
- for j in range(len(block)):
- if ref[i] == block[j]:
- block[j] = block[j].replace(block[j], liste[i][3:])
- return block
- def convertChar(array):
- solve, i = "", 0
- for i in range(len(array)):
- solve += array[i]
- return solve
- def main():
- with open(FILE, "r") as content:
- raw = content.read()
- content.close()
- raw = padding(raw)
- message_reverse = transposition(clef, raw)
- message_reverse = convertString(message_reverse, len(clef), len(message_reverse))
- block = getblock(message_reverse)
- reference = refe(charset)
- frequence = occurence(block, reference)
- correspondance = liste(reference, frequence, french)
- array_solve = substitution(block, correspondance, reference)
- solve = convertChar(array_solve)
- print(len(solve))
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement