Advertisement
Guest User

Untitled

a guest
Dec 6th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.73 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import math
  4.  
  5. def egcd(a, b):
  6. if a == 0:
  7. return (b, 0, 1)
  8. else:
  9. g, y, x = egcd(b % a, a)
  10. return (g, x - (b // a) * y, y)
  11.  
  12. def modinv(a, m):
  13. g, x, y = egcd(a, m)
  14. if g != 1:
  15. raise Exception('modular inverse does not exist')
  16. else:
  17. return x % m
  18.  
  19. def CRT(key, p, q, n, m):
  20. keyP = key % (p-1)
  21. keyQ = key % (q-1)
  22. qInv = modinv(q, p)
  23. m1 = math.pow(m, keyP) % p
  24. m2 = math.pow(m, keyQ) % q
  25. h = qInv * (m1 - m2) % p
  26. m = m2+(h*q)
  27. return m
  28.  
  29. p = 3
  30. q = 11
  31. n = p*q #33
  32. phi = (p-1)*(q-1) #20
  33. e = 7
  34. d = modinv(e, phi) #3
  35.  
  36. m = 6
  37.  
  38. enc = math.pow(m, e) % n
  39. print "Encrypted: ", enc
  40. dec = CRT(d, p, q, n, enc)
  41. print "Decrypted: ", dec
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement