Advertisement
paulogp

Codigo RSA

Aug 7th, 2011
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.33 KB | None | 0 0
  1. # Codigo RSA
  2. # paulogp, 2008
  3.  
  4. def gcd(a, b):
  5.     '''Algoritmo de Euclides; Determinacao do Maximo Divisor Comum
  6.    a, b: numeros inteiros'''
  7.     assert a >= b # a must be the larger number
  8.  
  9.     while (b != 0):
  10.         remainder = a % b
  11.         a, b  = b, remainder
  12.  
  13.     return a
  14.  
  15. def chaves(p, q):
  16.     '''Criacao das chaves publicas e privadas
  17.    p, q: numeros primos'''
  18.     n = p * q
  19.     fi = (p - 1) * (q - 1)
  20.     e = 2
  21.     k = 0
  22.  
  23.     while gcd(fi, e) > 1:
  24.         e = e + 1
  25.    
  26.     achou = 0
  27.     while achou == 0:
  28.         d = (1. + (k * fi)) / e
  29.        
  30.         if d == round(d):
  31.             achou = 1
  32.         else:
  33.             k = k + 1
  34.  
  35.     print 'Chave publica ' + int(e) + ', ' + `n`
  36.     print 'Chave privada ' + int(d) + ', ' + `n`
  37.  
  38. def cifrar(e, n, M):
  39.     '''Cifrar a mensagem
  40.    e, n: chave publica
  41.    M: mensagem em codigo ASCII em vector
  42.    exemplo: cifrar(3, 253, [64, 90])'''
  43.     L = []
  44.     for i in range(0, len(M)):
  45.         L.append((M[i]**e) % n)
  46.  
  47.     print L
  48.  
  49. def decifrar(d, n, M):
  50.     '''Decifrar a mensagem
  51.    d, n: chave privada
  52.    M: mensagem em codigo ASCII em vector
  53.    exemplo: decifrar(147, 253, [36, 107])'''
  54.     L = []
  55.     for i in range(0, len(M)):
  56.         L.append((M[i]**d) % n)
  57.  
  58.     print L
  59.  
  60. # exemplo
  61. cifrar(3, 253, [64, 90])
  62. decifrar(147, 253, [36, 107])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement