td chiffrement - (issue de efa)
Comme promis hier, voici qqs hics dans le TD15, vers la fin. Cela concerne la Section 2, Le chiffrement de Vigenère.
On est d'accord que la clé peut être donnée sous forme numérique d'un tuple d'int, ou comme une chaîne de caractères majuscules. Or je pense qu'il faut réclamer une bijection entre les deux ensembles, pour pouvoir passer librement de l'un à l'autre et de retour. Et là, ça se gâte:
- La clé alpha "CAIL" est supposée correspondre à la clé numérique (3,1,9,12)
- "A" correspond donc à 1... et "Z" à 26 (il y a 26 lettres dans l'alphabet)
- Ce qui veut dire que la clé "ZZZZ" correspondrait à la (0,0,0,0) qui est interdite... mais l'énoncé pour valid_str_key accepte joyeusement les "Z", laissant donc passer OK des clés alpha interdite en numérique. Clairement, y'a un prob
- J'ai opté pour interdire les "Z" dans les clés alpha (y compris dans valid_str_key!), car avec le modulo 26 ils renvoient la lettre du clair
- Pour valid_int_key, on demande des valeurs "dans l’intervalle [−25, 25]". Tu noteras que le 26 est interdit... alors qu'il correspond au "Z" qui, lui, serait accepté en alpha (voir ci-dessus). Mais le 0 semble permis... alors qu'il correspond à "Z" qui devrait être interdit en alpha!
- J'ai donc interdit le 0 dans les clés numériques
- Mais surtout: tout à coup des ints négatifs?? J'ai hypothétisé que les clés négatives étaient utiles pour le déchiffrement - comme on en a utilisé dans Caesar - et donc OK
- Mais cela veut dire qu'il ne faut pas mélanger les négatifs avec les positifs dans une clé numérique, car cela impliquerait chiffrer et déchiffrer en même temps! Or valid_int_key ne réclame rien en la matière pour l'éviter...
- J'ai donc imposé la condition supplémentaire dans valid_int_key qu'ils doivent tous être positifs ou tous négatifs (pas de mélange)
- Une alternative valable serait d'imposer les positifs (i.e. [1, 25]) dans les clés numériques... mais alors d'ajouter un paramètre supplémentaire aux fonction encode_xxx pour dire si on encode (en utilisant la clé numérique donnée) ou on décode (en utilisant les négatifs de la clé donnée)... mais rien de tel n'est réclamé pour les fonctions encode_xxx
Bref, c'est un peu a mess... Mes "améliorations/corrections" règlent la plupart des problèmes je pense, mais il faudrait clairement repasser sur tout le Vigenère pour que tout le monde fasse pareil.