(defparameter *ALPHA* "ABCDEFGHIJKLMNOPQRSTUVWXYZ") ;; rechercher un caractere dans une chaine ;; (defun rechercher-element (item s) (dotimes (i (length s)) (if (equal (aref s i) item) (return-from rechercher-element i) ) ) -1 ) ;; CESAR (defun coder-cesar (M K) (let ((C (make-string (length M) :initial-element #\space)) ) (dotimes (i (length M)) (setf (aref C i) (aref *ALPHA* (mod (+ (rechercher-element (aref M i) *ALPHA*) K) (length *ALPHA*))) ) ) C ) ) ;; (coder-cesar "BONJOUR" 3) --> "ERQMRXU" (defun decoder-cesar (C K) (coder-cesar C (- K)) ) ;; (decoder-cesar "ERQMRXU" 3) --> "BONJOUR" (defun coder-subst (M K) (let ((C (make-string (length M) :initial-element #\space)) ) (dotimes (i (length M)) (setf (aref C i) (aref K (rechercher-element (aref M i) *ALPHA*)) ) ) C ) ) ;; (coder-subst "BONJOUR" (genere-cle-subst "MAITRECORBEAUSURUNARBREPERCHE" *ALPHA*)) --> "EHPVHJC" (defun genere-cle-subst (texte alpha) (let ((K (make-string (length alpha) :initial-element #\space)) (ik 0) ) (dotimes (i (length texte)) (when (< (rechercher-element (aref texte i) K) 0) (print (aref texte i)) (setf (aref K ik) (aref texte i)) (incf ik) ) ) (dotimes (i (length alpha)) (when (< (rechercher-element (aref alpha i) K) 0) (print (aref alpha i)) (setf (aref K ik) (aref alpha i)) (incf ik) ) ) K ) ) ;; (genere-cle-subst "LEZEBUBOITAVIDEMENTLEZEPHYR" *ALPHA*) (defun coder-vig (M K) (let ((C (make-string (length M) :initial-element #\space)) (ik 0) posc posk) (dotimes (i (length M)) (setf posc (rechercher-element (aref M i) *ALPHA*)) (setf posk (rechercher-element (aref K ik) *ALPHA*)) (setf (aref C i) (aref *ALPHA* (mod (+ posc posk) (length *ALPHA*)))) (setf ik (mod (+ ik 1) (length K))) ) C ) ) ;; (coder-vig "APPELERNORDTROUPESVILLE" "ROUGE") --> "RDJKPVFHUVUHLUYGSMBMCZY" (defun decoder-vig (M K) (let ((C (make-string (length M) :initial-element #\space)) (ik 0) posc posk) (dotimes (i (length M)) (setf posc (rechercher-element (aref M i) *ALPHA*)) (setf posk (rechercher-element (aref K ik) *ALPHA*)) (setf (aref C i) (aref *ALPHA* (mod (- posc posk) (length *ALPHA*)))) (setf ik (mod (+ ik 1) (length K))) ) C ) ) ;; (decoder-vig "RDJKPVFHUVUHLUYGSMBMCZY" "ROUGE") --> "APPELERNORDTROUPESVILLE" (coder-vig "ROUGE" "ROUGE") --> "ICOMI" (coder-vig "ICOMI" "ROUGE") --> "ZQISM" (coder-vig "QECYQ" "ROUGE")