Cryptographie en Ruby
Bonsoir à tous.
J'ai décidé de créer un algorithme qui me permettra de rapidement déchiffrer des messages cryptés par la méthode de César (décalage des lettres modulo 26). Pour cela, j'ai décidé de procéder de la manière suivante : je créé un hache qui associe chaque lettre de l'alphabet à son rang - 1, c'est à dire a=0,b=1, etc.., puis une fonction qui à un texte que j'aimerais de longueur arbitraire associe le même texte dont toutes les lettres on été décalées de 1.
J'ai plusieurs questions : est ce que cela vous semble être une bonne approche? comment travailler modulo 26? C'est à dire comment faire comprendre à Ruby que le z va devenir un a?
Merci d'avance.
J'ai décidé de créer un algorithme qui me permettra de rapidement déchiffrer des messages cryptés par la méthode de César (décalage des lettres modulo 26). Pour cela, j'ai décidé de procéder de la manière suivante : je créé un hache qui associe chaque lettre de l'alphabet à son rang - 1, c'est à dire a=0,b=1, etc.., puis une fonction qui à un texte que j'aimerais de longueur arbitraire associe le même texte dont toutes les lettres on été décalées de 1.
J'ai plusieurs questions : est ce que cela vous semble être une bonne approche? comment travailler modulo 26? C'est à dire comment faire comprendre à Ruby que le z va devenir un a?
Merci d'avance.
Réponses
-
J'ai changé mon approche, j'ai vu sur Wikiversité que l'on pouvait parcourir une chaîne de caractères, et comment faire pour que la fonction demande du texte de longueur arbitraire. Maintenant, il ne me reste plus qu'à trouver comment utiliser la méthode each de manière à ce que chaque caractère soit remplacé par le suivant dans l'alphabet.
-
Pourquoi ne pas travailler avec la valeur ASCII de chaque caractère alphabétique ?Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
Bonsoir, merci pour ce conseil, c'est réussi! :
def cesar() texte = gets tab = [] texte.each_byte do |c| tab << c end size = tab.size for n in (0..size-1) if tab[n]<122 tab[n] = tab[n]+1 else tab[n] = 97 end end for n in (0..size-1) print tab[n].chr end end
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.1K Toutes les catégories
- 8 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 53 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 62 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 312 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 772 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres