[projet ISN] chiffrement de vigénère

Résolu/Fermé
lola_2015 Messages postés 9 Date d'inscription mardi 24 mars 2020 Statut Membre Dernière intervention 13 mai 2020 - Modifié le 25 mars 2020 à 20:08
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 31 mars 2020 à 17:48
on doit rendre ce projet à la fin de l'année, j'ai commencé a faire ça mais je sais pas quoi faire après. Notre pros était sensé nous aider mais avec le confinement ça va être compliqué.
def genere_cle_vigenere(msg_clair: str, cle_vig: str) -> str:
    '''
    fonction renvoyant la clé de vigenère rallongée
    param msg_clair : message
    param cle_vig : clé
    return : la clé rallongée
    '''
    long_msg_clair = len(msg_clair)
    if len(cle_vig)>= long_msg_clair:
        return cle_vig[:long_msg_clair]
    else:
        res = cle_vig
        i = 0
        while len(res)<long_msg_clair:
            res = res + cle_vig[i%3]
            i = i + 1
        return res


ALPHABET = '0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def crypte_lettre_vig(car_clair: str, car_cle_vig: str) -> str:
    '''
    fonction renvoyant le caractère de vigenère
    param car_clair: un caractère du msg_clair
    param car_cle_vig: le caractère de la cle_vig associé
    return: le caractère de vigenère
    '''
    
    return ALPHABET[(ALPHABET.index(car_clair.upper()) + ALPHABET.index(car_cle_vig.upper())) % 37]


'''msg_clair -> msg_vigenere -> msg_transpo'''

print(genere_cle_vigenere('bonjour', 'riz'))
print(genere_cle_vigenere('bon', 'riz'))

print(crypte_lettre_vig('J', 'R'))

8 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
26 mars 2020 à 12:02
Je te renvoie le programme, car il y avait une erreur dans la fonction
genere_cle_vigenere
En effet il faut écrire cle = cle + cle_vig[i%len(cle_vig)] et non pas
cle = cle + cle_vig[i%3]
sinon, ca ne marche pas pour n'importe quelle longueur de clé !
Et le codage Vigenère est maintenant dans une fonction

# -*- coding:Latin-1 -*-

ALPHABET = '0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ'
CLE_SECRETE = 'LOLA'

def genere_cle_vigenere(msg_clair: str, cle_vig: str) -> str: 
	''' 
	Renvoie la clé vigenère ajustée à la longueur du message clair
	'''

	if (len(cle_vig) >= len(msg_clair)):
		cle = cle_vig[:len(msg_clair)]
	else:
		cle = cle_vig
		i = 0
		while(len(cle) < len(msg_clair)):
			cle = cle + cle_vig[i%len(cle_vig)]
			i += 1

	return cle

def codage_vigenere(message_clair, cle):
	''' Codage du message clair avec la cle'''

	message_code = ''

	for k in range (len(message_clair)):
		try:
			message_code += ALPHABET[(ALPHABET.index(message_clair[k])+ALPHABET.index(cle[k]))%len(ALPHABET)]
		except:
			print('\nErreur {} inexistant dans ALPHABET: {}'.format(message_clair[k], ALPHABET))

	return message_code

#Saisie du message
print('\n')
print('''Codage d'un message'''.center(50,'*'))
message_clair = input('\nEntrez le message à coder : ')

#L'alphabet est en majuscules, donc le message doit l'etre aussi
message_clair = message_clair.upper()

#Longueur de la clé = longueur du message clair
cle = genere_cle_vigenere(message_clair, CLE_SECRETE)

#Codage
message_code = codage_vigenere(message_clair, cle)
print('>>> ', message_code)

input('\n\nAppuyer sur enter pour quitter ...')
2
lola_2015 Messages postés 9 Date d'inscription mardi 24 mars 2020 Statut Membre Dernière intervention 13 mai 2020
26 mars 2020 à 14:39
Encore merci, vous êtes mon sauveur
on doit faire un chiffrement de Vigenère + une transposition rectangulaire.
On a pas eu le temps de le faire les transpositions ( blocus, les épreuves des 1er, semaine de bac blanc, le confinement) je sais pas comment faire, j'ai cherché sur internet mais les réponses ne m'aide pas.
0