Je travaille sur un cours en ligne qui nous permet de créer un chiffrement césar et vigenere, mais nous avons d'abord créé deux fonctions; un pour trouver la position d'une lettre dans une variable alphabet, et un pour faire tourner un caractère donné pour un nombre donné de fois (j'ai vu que ord() et chr() fonctionnent mieux, mais l'affectation veut que nous nous concentrions sur des concepts plus simples pour l'instant, je suppose).Chiffrement Python Vigenere avec fonctions requises
J'ai réussi à faire fonctionner la fonction César, mais je ne suis pas sûr de la façon d'aller de l'avant avec le chiffre de vigenere. J'ai regardé de nombreuses vidéos et regardé autour de ce site, mais je n'en ai trouvé aucun qui permette la préservation d'espaces et de caractères non alphabétiques. Quelqu'un peut-il me diriger dans la bonne direction de la façon de démarrer la fonction vigenere?
#Create function alphabet_position(letter) to turn letter into number
#such as a=0 or e=4, using lowercase to make sure case doesnt matter.
def alphabet_position(letter):
alphabet ="abcdefghijklmnopqrstuvwxyz" #Lists alphabet for a key
lower_letter = letter.lower() #Makes any input lowercase.
return alphabet.index(lower_letter) #Returns the position of input as a number.
def rotate_character(char, rot):
alphabet = "abcdefghijklmnopqrstuvwxyz"
if char.isalpha():
a = alphabet_position(char)
a = (a + rot) % 26 #needs modulo
a = (alphabet[a])
if char.isupper():
a = a.title()
return a
else:
return char
def encrypt(text, rot):
list1 = ""
for char in text:
list1 += rotate_character(char, rot)
return list1
def main():
x = input("Type a message: ")
y = input("Rotate by: ")
#result = rotate_character(x, y) #Not needed once encrypt function works.
result = encrypt(x, y)
print (result)
if __name__ == '__main__':
main()
faites votre alphabet couvrir n'importe quel caractère que vous voulez; faire l'addition '% len (alphabet)'. cryptage avec 'rot'; décryptage avec 'len (alphabet) -rot'. –
Où dites-vous que je devrais mettre le modulo Len (alphabet)? Dans ma fonction de cryptage actuelle? –
dans 'rotate_character' au lieu de'% 26' ... –