Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (* Le chiffrement de VigenËre *)
- (* C'est un systËme de substitution poly-alphabÈtique ou de
- chiffrement polyalphabÈtique. Cela signifie qu'il permet de
- remplacer une lettre par une autre qui n'est pas toujours la mÍme,
- contrairement au chiffre de CÈsar ou ‡ ROT13 qui se contentaient
- d'utiliser la mÍme lettre de substitution. C'est donc une mÈthode
- relativement plus ´ solide ª que les deux autres. *)
- (* I. Chiffrement *)
- let string_of_char c = String.make 1 c ;;
- let keys s s1 =
- let rec key1 s s1 s0 =
- match s0 with
- |s0 when String.length s0 >= String.length s -> s0
- |_ -> key1 s s1 (s1^s0)
- in key1 s s1 ("");;
- let vigenere s key =
- let key = keys s key in
- let rec vig s key m n x =
- match m with
- |m when n = m -> ""
- |m when Char.code s.[m] < Char.code
- 'a' || Char.code s.[m] > Char.code 'z' -> (string_of_char (s.[m]))^(vig s key (m+1) n (x))
- |m -> (if (Char.code s.[m] + Char.code key.[x]) -97 >
- 122 then string_of_char (Char.chr ((Char.code s.[m] + Char.code key.[x]-97-26)))^(vig s key (m+1) n (x+1))
- else (string_of_char (Char.chr (Char.code s.[m] + Char.code key.[x]-97 )))^(vig s key (m+1) n (x+1)))
- in vig s key 0 (String.length s) 0;;
- (* II. Dechiffrement *)
- let decrypt_vigenere s key =
- let key = keys s key in
- let rec dvg s key m n x =
- match m with
- |m when n = m -> ""
- |m when Char.code s.[m] < Char.code
- 'a' || Char.code s.[m] > Char.code 'z' -> (string_of_char (s.[m]))^(dvg s key (m+1) n (x))
- |m -> (if (Char.code s.[m] - Char.code key.[x]) +97 < 97 then string_of_char (Char.chr ((Char.code s.[m] - Char.code key.[x]+97+26)))^(dvg s key (m+1) n (x+1))
- else (string_of_char (Char.chr (Char.code s.[m] - Char.code key.[x]+97 )))^(dvg s key (m+1) n (x+1)))
- in dvg s key 0 (String.length s) 0;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement