Inscription / Connexion Nouveau Sujet
Niveau doctorat
Partager :

Cryptage par la méthode affine

Posté par
Roomaissa
04-10-21 à 01:49

Bonjour tous le monde,

Dans l'énoncé d'exercice il m'ont demandé de déchiffrer un text dont la fréquence d'apparition de la lettre G est la plus dominante ce qui fait elle correspond a E dans la langue française , mais par la suite j'ai les deux lettres I et H ont la même fréquence d'apparition . Comment peux je me construire mon système de deux équations ?
Est ce que  je dois tester les deux lettres où bien y'a une méthode plus optimale?
S'il vous plaît aide moi !

* modération > le niveau a été modifié  en fonction du profil renseigné *

Posté par
GBZM
re : Cryptage par la méthode affine 04-10-21 à 07:58

Bonjour,

Fais des essais, tu verras bien si le texte décodé a du sens ou non.

Posté par
Ulmiere
re : Cryptage par la méthode affine 04-10-21 à 16:57

Passe à l'ordre 2 et regarde quels bigrammes (séquences de deux lettres consécutives) sont les plus fréquents et compare avec ta langue cible (le français ici) pour trancher entre le I et le H.
Je ne sais pas dans quel langage tu vas l'écrire, alors voici un pseudo-code hybride Python/C++



fonction analyse_frequentielle(texte : str, ordre_max=-1):
	map<int, map<char, int>> M # ou un vecteur de map c'est toi qui vois
	if(texte vide):
		return M
	len_texte = len(texte)
	
	if ordre_max==-1 or ordre_max>len_texte:
		ordre_max = len_texte
		
	for(i=1; i<ordre_max; ++i):
		m = map<char, int>();
		for(j=0; j<len_texte-i; ++j)
			s = texte[j:j+i]
			if( s pas dans m):
				m[s] = 0
			m[s] += 1 # on compte les occurences de s
		M[i] = m
	return M


etaoinshrdlu = ... # map de reference correspondant à ta langue (le français)

fonction decrypter(texte_crypte):
	M = analyse_frequentielle(texte_crypte, 2) # tu peux aussi ecrire un code qui trouve automatiquement le 2
	# argmax(M[1]) est la lettre la plus fréquente
	# argmax(M[2]) est le bigramme le plus fréquent
	# etc
	
	# ... ton code ici

Posté par
Ulmiere
re : Cryptage par la méthode affine 04-10-21 à 17:01

Bon bien sur il y a des erreurs ci dessus.
Par exemple c'est pas un map<char, int> mais plutot un map<str, int> ou u map<const char*, int>
Et il y a des trucs à changer, comme par exemple
ordre_max = min(max(1,ordre_texte),len_texte) qui peut remplacer le premier if



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !