Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider 6d2439f8 rédigé par E214194U's avatar E214194U
Parcourir les fichiers

f

parent 3258373b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
import math
import string
from turtle import width
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
......@@ -31,14 +32,6 @@ def caesar_crypt(msg,decal):
msg_crypt+=new_alphabet[y]
return msg_crypt
def txtcryptjson(fichier,decal):
with open(fichier,"r",encoding="UTF-8") as txt:
new_file = open("crypted_with_caesar.txt","w")
str=txt.read()
strcry=caesar_crypt(str, decal)
new_file.write(strcry)
new_file.close()
filetofreq("crypted_with_caesar.txt","freq2.json")
def filetofreq(text,fichier):
new_file = open(fichier,"w")
......@@ -59,7 +52,6 @@ def bar_freq(fichier):
yAxis = [value for key, value in dictionary.items()]
fig, ax = plt.subplots()
plt.xticks(rotation=35,ha="right")
ax.bar(xAxis,yAxis)
plt.tight_layout()
ax.set_title("Fréquence d'apparition d'une lettre")
......@@ -75,24 +67,99 @@ def bar_freq1_freq2(fichier1,fichier2):
yAxis2 = [value for key, value in dictionary2.items()]
fig, ax = plt.subplots()
plt.xticks(rotation=35,ha="right")
ax.bar(np.arange(len(xAxis))+0.2,yAxis,0.4)
ax.bar(np.arange(len(xAxis2))-0.2,yAxis2,0.4)
ax.bar(np.arange(len(xAxis))+0.2,yAxis,0.4,label="Freq 1")
ax.bar(np.arange(len(xAxis2))-0.2,yAxis2,0.4,label="Freq 2")
plt.tight_layout()
plt.legend()
ax.set_title("Fréquence d'apparition d'une lettre")
plt.show()
def bar_compare_freq(fichier1,fichier2,decal):
txtcryptjson(fichier2,decal)
bar_freq1_freq2(fichier1,fichier2)
dictionary = json.load(open(fichier1, 'r'))
xAxis = [key for key, value in dictionary.items()]
yAxis = [value for key, value in dictionary.items()]
dictionary2 = json.load(open(fichier2, 'r'))
xAxis2 = [key for key,value in dictionary2.items()]
yAxis2 = [value for key, value in dictionary2.items()]
yAxis2=yAxis2[decal:]+yAxis2[:decal]
fig, ax = plt.subplots()
ax.bar(np.arange(len(xAxis))+0.2,yAxis,0.4,label="Freq 1")
ax.bar(np.arange(len(xAxis2))-0.2,yAxis2,0.4,label="Freq 2")
plt.tight_layout()
plt.legend()
ax.set_title("Fréquence d'apparition d'une lettre")
plt.show()
def manualdecrypt(fichier1,fichier2):
for i in range(1,26):
print("décalage :",i)
bar_compare_freq(fichier1,fichier2,i)
def moy(x):
add=0
for e in x:
add+=e
return add/len(x)
def covar(X,Y):
som=0
if len(X) == len(Y):
for i in range(0,len(X)):
a=(X[i]-moy(X)) * (Y[i]-moy(Y))
a/=len(X)
som+=a
a=0
return som
else:
return "error"
def variance(X):
a=0
for i in range(0,len(X)):
a+=(X[i]-moy(X))**2
return a*(1/len(X))
def coeff_corr(X,Y):
return covar(X,Y)/(math.sqrt(variance(X)*variance(Y)))
def correlation_freqs(fichier1,fichier2):
dictionary = json.load(open(fichier1, 'r'))
yAxis = [value for key, value in dictionary.items()]
dictionary2 = json.load(open(fichier2, 'r'))
yAxis2 = [value for key, value in dictionary2.items()]
corr=-1
decal=0
for i in range(1,26):
yAxis2=yAxis2[1:]+yAxis2[:1]
print("décalage :",i," crypt correlation :",coeff_corr(yAxis,yAxis2))
if corr<coeff_corr(yAxis,yAxis2):
decal=i
corr=coeff_corr(yAxis,yAxis2)
print("Décalage de décryptage :", decal)
return decal
def decrpt(fichier):
filetofreq(fichier,"freq.json")
with open(fichier,"r",encoding="UTF-8") as txt:
new_file = open("decrypted_with_caesar.txt","w")
str=txt.read()
strdecry=caesar_crypt(str,-correlation_freqs("freq_lettre_fr.json","freq.json"))
new_file.write(strdecry)
new_file.close()
def main():
filetofreq("encrypted_with_caesar.txt","freq1.json")
txtcryptjson("encrypted_with_caesar.txt",3)
#bar_freq("freq1.json")
#bar_freq1_freq2("freq1.json","freq2.json")
bar_compare_freq("freq1.json","freq2.json",0)
#bar_freq("freq_lettre_fr.json")
#bar_freq1_freq2("freq_lettre_fr.json","freq1.json")
#bar_compare_freq("freq_lettre_fr.json","freq1.json",3)
#manualdecrypt("freq_lettre_fr.json","freq1.json") #ici c'est 17 de décalage
correlation_freqs("freq_lettre_fr.json","freq1.json")
decrpt("encrypted_with_caesar.txt")
main()
\ No newline at end of file
abcdefghijklmnopqrstuvwxyz
\ No newline at end of file
LECHIFFREMENTPARSUBSTITUTIONESTUNETECHNIQUEDECHIFFREMENTUTILISEEDEPUISBIENLONGTEMPSPUISQUELECHIFFREDECESARENESTUNCASPARTICULIERSANSAUTREPRECISIONELLEDESIGNEENGENERALUNCHIFFREMENTMONOALPHABETIQUEQUICONSISTEAECHANGERDANSUNMESSAGECHACUNDESCARACTERESDELALPHABETPARUNAUTREQUANDLALPHABETDARRIVEEESTLEMEMELASUBSTITUTIONESTDEFINIEPARUNEPERMUTATIONDESCARACTERESDELALPHABETCECHIFFREMENTESTASSEZSIMPLEACASSERPARANALYSEDESFREQUENCESDESSIGNESDUTEXTECHIFFREMAISILRESTEENCOREUTILISECOMMEPARTIEDESCERTAINSCHIFFREMENTSACTUELSAFINDEBROUILLERLANALYSEPARFREQUENCESDIVERSESTECHNIQUESDESUBSTITUTIONPLUSOUMOINSELABOREESONTETEINVENTEESAUCOURSDESSIECLESCOMMELESCHIFFREMENTSPARSUBSTITUTIONHOMOPHONIQUEOUPARSUBSTITUTIONPOLYALPHABETIQUELASUBSTITUTIONMONOALPHABETIQUEESTUNEDESPLUSANCIENNESMETHODESDECHIFFREMENTELLECONSISTEAREMPLACERDANSLEMESSAGECLAIRUNCARACTEREDONNEDELALPHABETPARUNSIGNEDONNEDEUXCARACTERESDISTINCTESDOIVENTETRECHIFFREESENDEUXSIGNESDISTINCTSAUQUELCASILYAURAITAMBIGUITELORSDUDECHIFFREMENTUNMEMECARACTEREESTTOUJOURSCHIFFREPARLEMEMESIGNECESTLEPRINCIPEDELASUBSTITUTIONMONOALPHABETIQUELASUBSTITUTIONPOLYALPHABETIQUESEFAITENSUBSTITUANTUNSIGNEDUMESSAGEENCLAIRPARUNEAUTRECHOISIEENFONCTIONDUNETATDUCRYPTOSYSTEMEETNONPLUSDEMANIEREFIXECOMMEPOURLAMONOSUBSTITUTIONCECHANGEMENTDELETTRETOUTAULONGDUPROCEDESOBTIENTALAIDEDUNECLEQUIINDIQUELENOMBREDEDECALAGEAREALISERACEMOMENTPOURCHIFFRERLESIGNESUIVANTONUTILISEALORSLECARACTERESUIVANTDELACLEETAINSIDESUITEONRECOMMENCEAUDEBUTDELACLEQUANDTOUSSESSIGNESSONTUTILISESLAPLUSCELEBREUTILISATIONDECETTETECHNIQUERESTELAMACHINEALLEMANDEENIGMADELADEUXIEMEGUERREMONDIALE
\ No newline at end of file
{"a": 0.06353240152477764, "b": 0.0, "c": 5.082592121982211, "d": 3.1130876747141043, "e": 7.306226175349428, "f": 4.193138500635324, "g": 2.6048284625158833, "h": 1.1435832274459974, "i": 5.336721728081321, "j": 8.259212198221093, "k": 7.814485387547649, "l": 6.289707750952986, "m": 0.3811944091486658, "n": 0.0, "o": 0.3176620076238882, "p": 0.44472681067344344, "q": 0.06353240152477764, "r": 7.496823379923762, "s": 1.7153748411689964, "t": 4.701397712833545, "u": 3.6213468869123253, "v": 16.96315120711563, "w": 2.096569250317662, "x": 1.2706480304955527, "y": 2.096569250317662, "z": 7.6238881829733165}
\ No newline at end of file
{"a": 3.8461538461538463, "b": 3.8461538461538463, "c": 3.8461538461538463, "d": 3.8461538461538463, "e": 3.8461538461538463, "f": 3.8461538461538463, "g": 3.8461538461538463, "h": 3.8461538461538463, "i": 3.8461538461538463, "j": 3.8461538461538463, "k": 3.8461538461538463, "l": 3.8461538461538463, "m": 3.8461538461538463, "n": 3.8461538461538463, "o": 3.8461538461538463, "p": 3.8461538461538463, "q": 3.8461538461538463, "r": 3.8461538461538463, "s": 3.8461538461538463, "t": 3.8461538461538463, "u": 3.8461538461538463, "v": 3.8461538461538463, "w": 3.8461538461538463, "x": 3.8461538461538463, "y": 3.8461538461538463, "z": 3.8461538461538463}
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter