Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.88 KB | None | 0 0
  1. (* Le chiffrement de VigenËre *)
  2.  
  3. (* C'est un systËme de substitution poly-alphabÈtique ou de
  4.    chiffrement polyalphabÈtique. Cela signifie qu'il permet de
  5.    remplacer une lettre par une autre qui n'est pas toujours la mÍme,
  6.    contrairement au chiffre de CÈsar ou ‡ ROT13 qui se contentaient
  7.    d'utiliser la mÍme lettre de substitution. C'est donc une mÈthode
  8.    relativement plus ´ solide ª que les deux autres. *)
  9.  
  10. (* I. Chiffrement *)
  11. let string_of_char c = String.make 1 c ;;
  12.  
  13. let keys s s1 =
  14.   let rec key1 s s1 s0 =
  15.     match s0 with
  16.       |s0 when String.length s0 >= String.length s -> s0
  17.       |_ -> key1 s s1 (s1^s0)
  18.   in key1 s s1 ("");;
  19.  
  20.  
  21. let vigenere s key =
  22.   let key = keys s key in
  23.   let rec vig s key m n  x =
  24.     match m with
  25.       |m when n = m  -> ""
  26.       |m when  Char.code s.[m]  < Char.code
  27.          'a' || Char.code s.[m] > Char.code 'z' -> (string_of_char (s.[m]))^(vig s key (m+1) n (x))
  28.       |m  -> (if (Char.code s.[m] + Char.code key.[x]) -97 >
  29.          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))
  30.      else (string_of_char (Char.chr (Char.code s.[m] + Char.code key.[x]-97 )))^(vig s key  (m+1) n  (x+1)))                     
  31.   in vig s key 0 (String.length s) 0;;
  32.  
  33. (* II. Dechiffrement *)
  34. let decrypt_vigenere s key =
  35.   let key = keys s key in
  36.   let rec dvg s key m n  x =
  37.     match m with
  38.       |m when n = m  -> ""
  39.       |m when  Char.code s.[m]  < Char.code
  40.          'a' || Char.code s.[m] > Char.code 'z' -> (string_of_char (s.[m]))^(dvg s key (m+1) n (x))
  41.       |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))
  42.      else (string_of_char (Char.chr (Char.code s.[m] - Char.code key.[x]+97 )))^(dvg s key  (m+1) n  (x+1)))                     
  43.   in dvg s key 0 (String.length s) 0;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement