Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. encrypt :: Integer -> Integer -> String -> String
  2. encrypt 0 0 msg =
  3. let primes = take 90 $ filter isPrime [1..]
  4. p1 = last primes
  5. p2 = last $ init primes
  6. tot = totient p1 p2
  7. e = myE tot
  8. n = p1 * p2
  9. rsa_encoded = rsa_encode n e $ encode msg
  10. encrypted = show rsa_encoded
  11. d = myD e n tot
  12. decrypted = decode $ rsa_decode d n rsa_encoded
  13. in "enc: " ++ encrypted
  14. ++ "; dec: " ++ decrypted
  15. ++ "; p1: " ++ show p1
  16. ++ "; p2: " ++ show p2
  17. ++ "; tot: " ++ show tot
  18. ++ "; e: " ++ show e
  19. ++ "; n: " ++ show n
  20. ++ "; d: " ++ show d
  21. encrypt e n msg =
  22. let rsa_encoded = rsa_encode n e $ encode msg
  23. encrypted = concatMap show rsa_encoded
  24. in "enc:" ++ encrypted
  25.  
  26. decrypt :: Integer -> Integer -> String -> String
  27. decrypt d n msg =
  28. let decrypted = decode $ rsa_decode d n (read msg)
  29. in "dec: " ++ decrypted
  30.  
  31.  
  32. encode :: String -> [Integer]
  33. encode s = map (toInteger . fromEnum) s
  34.  
  35. rsa_encode :: Integer -> Integer -> [Integer] -> [Integer]
  36. rsa_encode n e numbers = map (\num -> (num ^ e) `mod` n) numbers
  37.  
  38. rsa_decode :: Integer -> Integer -> [Integer] -> [Integer]
  39. rsa_decode d n ciphers = map (\c -> (c ^ d) `mod` n) ciphers
  40.  
  41. decode :: [Integer] -> String
  42. decode encoded = map (chr . fromInteger) encoded
  43.  
  44. divisors :: Integer -> [Integer]
  45. divisors n = [m | m <- [1..n] , n `mod` m == 0 ]
  46.  
  47. isPrime :: Integer -> Bool
  48. isPrime n = divisors n == [1,n]
  49.  
  50. totient :: Integer -> Integer -> Integer
  51. totient prime1 prime2 = (prime1 - 1) * (prime2 - 1)
  52.  
  53. myE :: Integer -> Integer
  54. myE tot = head [ n | n <- [2..tot - 1] , gcd n tot == 1 ]
  55.  
  56. myD :: Integer -> Integer -> Integer -> Integer
  57. myD e n phi = head [ d | d <- [1..n] , (d * e) `mod` phi == 1 ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement