document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #!/usr/bin/env python
  2.  
  3. from sys import argv
  4. from gcd import gcd
  5. from utilMath import rprime, inversa, pickone, potmod, prime
  6.  
  7. # <- Codigo tomado de http://goo.gl/92dXd <<Introduccion a la Criptografia Moderna>>
  8. def cifrar(m):
  9.     chipertext = 0
  10.     for c in m:
  11.         chipertext <<= 8
  12.         chipertext += ord(c)
  13.     return chipertext
  14.  
  15. def decifrar(c):
  16.     mensaje = []
  17.     while c > 0:
  18.         mensaje.insert(0, chr(c & 255))
  19.         c >>= 8
  20.     return \'\'.join(mensaje)
  21. # Fin de codigo !->
  22.  
  23. def D(c,(d,n)):
  24.     return potmod(c,d,n)
  25.  
  26. def E(m, (e, n)):
  27.     return potmod(m,e,n)
  28.  
  29. def generarClaves(d):
  30.     p = rprime(d)
  31.     q = rprime(d)
  32.     n = p * q
  33.     phin = (p-1) * (q-1)
  34.     while True:
  35.         e = pickone(phin)
  36.         if gcd(phin, e) == 1:
  37.             break
  38.     d = inversa(e, phin)
  39.     return ((e, n), (d, n))
  40.  
  41. def genKey(longitud):
  42.     (publica, privada) = generarClaves(longitud)
  43.     pub = open(\'rsa.pub\', \'w\')
  44.     priv = open(\'rsa.priv\', \'w\')
  45.     for i in range(len(publica)):
  46.         pub.write(str(publica[i])+\'\\n\')
  47.         priv.write(str(privada[i])+\'\\n\')
  48.     return
  49.  
  50. def getKeyFromFile(archivo):
  51.     f = open(archivo, \'r\')
  52.     e = int(f.readline())
  53.     n = int(f.readline())
  54.     return (e, n)
  55.  
  56. if __name__==\'__main__\':
  57.     m = \'\'
  58.     tipo = False
  59.     try:
  60.         if len(argv) > 0:
  61.             for i in range(1,len(argv),2):
  62.                 if argv[i].lower() == \'--genkey\':
  63.                     genKey(int(argv[i+1]))
  64.                 elif argv[i].lower() == \'-m\':
  65.                     m = argv[i+1]
  66.                 elif argv[i].lower() == \'-e\':
  67.                     tipo = True
  68.                 elif argv[i].lower() == \'-d\':
  69.                     tipo = False
  70.                 elif argv[i].lower() == \'--help\':
  71.                     print \'Finjamos que escribi la ayuda :P\'
  72.                 else:
  73.                     print \'O_o no se a que te refieras con %s\' %argv[i]
  74.             if tipo:
  75.                 public = getKeyFromFile(\'rsa.pub\')
  76.                 print E(cifrar(m), public)
  77.             else:
  78.                 private = getKeyFromFile(\'rsa.priv\')
  79.                 print decifrar(D(int(m), private))
  80.     except:
  81.         print \'error 000x34 ... -.- si el codigo es inventado pero de todas formas checa la ayuda --help\'
');