Advertisement
nac13k

Protocolo DH

Jul 1st, 2013
1,951
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.81 KB | None | 0 0
  1. from sys import argv
  2.  
  3. def potmod(x, pot, mod):
  4.     bits = pot
  5.     res = 1
  6.     temp = x
  7.     while bits > 0:
  8.         if bits %2 == 1:
  9.             res = (res * temp  % mod)
  10.         temp = (temp * temp) % mod
  11.         bits = bits >> 1
  12.     return res
  13.  
  14. def bruteForce(generador, primo, F):
  15.     for i in range(primo):
  16.         valor = potmod(generador, i, primo)
  17.         if valor == F:
  18.             return i
  19.  
  20. def imprimeBruteForce(generador, primo, F):
  21.     resultado = ''
  22.     for i in range(primo):
  23.         valor = potmod(generador, i, primo)
  24.         if valor == F:
  25.             resultado = 'El numero utilizado es:'+str(i)
  26.         print '%d^%d mod %d = %d' % (generador, i, primo, valor)
  27.         print resultado
  28.         print 'Valor de Funcion buscado: %d' % F
  29.     return
  30.  
  31. def testGenerador(z, p):
  32.     lista = []
  33.     for i in range(1,p):
  34.         lista.append(z*i % p)
  35.     for j in range(1,p):
  36.         if lista.count(j) > 1:
  37.             return False
  38.     return True
  39.  
  40. if __name__ == "__main__":
  41.     potA = int(argv[1])
  42.     potB = int(argv[2])
  43.     generador = int(argv[3])
  44.     primo = int(argv[4])
  45.  
  46.     X = potmod(generador, potA, primo)
  47.     Ka = X**potB % primo
  48.  
  49.     Y = potmod(generador, potB, primo)
  50.     Kb = Y**potA % primo
  51.  
  52.     print '%d mod %d primo es gnerador:' %(generador, primo),
  53.     print testGenerador(generador, primo)
  54.  
  55.     if testGenerador(generador, primo):
  56.  
  57.         print 'El valor de la funcion para Alice es %d y el valor de K es %d' % (X,Ka)
  58.         print 'El valor de la funcion para Bob es %d y el valor de K es %d' % (Y,Kb)
  59.  
  60.         print 'La potencia para Alice original es %d y la potencia calculada es de %d' % (potA, bruteForce(generador, primo, X))
  61.         print 'La potencia para Bob original es %d y la potencia calculada es de %d' % (potB, bruteForce(generador, primo, Y))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement