[ Foro de Python ]

Error en el código RSA

05-Nov-2016 22:46
Invitado ([Python] Programa RSA)
0 Respuestas

Hola, estaba buscando un programa de cifrado RSA para python y encontré este:
#!/usr/bin/env python
# coding: utf-8


def genkeys(bitn):
   p = genprime(bitn)
   q = genprime(bitn)
   n = p * q
   phi = (p - 1) * (q - 1)

   # Este numero es arbitrario
   # cuanto mas pequeño, mas eficiente(rápido), pero menos seguro
   e=65537
   while (phi%e) == 0:
     e=genprime(17)
 
   d = inverse_mod(e, phi)

   public = (n, e)
   private = (n, d)
   return public, private

# Convierte un string en un número
def msg2num(s):
   n = 0
   for c in s:
       n <<= 8
       n += ord(c)
   return n

def cipher(s, public):
   n = msg2num(s)
   c = modex(n, public[1], public[0])
   return c

# Convierte un número en un string
def num2msg(n):
   s = []
   while n > 0:
       s.insert(0, chr(n & 255))
       n >>= 8
   return ''.join(s)

def decipher(n, private):
   p = modex(n, private[1], private[0])
   s = num2msg(p)
   return s

try:
   import hashlib
except:
   print >> sys.stderr, "No se ha encontrado el modulo Hashlib, no podras firmar ni comprobar firmas"

def sign(msg,private):
   s = int(hashlib.sha1(msg).hexdigest(), 16)
   return modex(s,private[1],private[0])

def checksign(msg,sign,pub):
   s = modex(sign,pub[1],pub[0])
   h = int(hashlib.sha1(msg).hexdigest(), 16)
   return s == h

def _testRSA(bitn,s):
   print ("Generando claves...")
   pub,priv=genkeys(bitn)
   print ("Probando cifrado...")
   print ("Cifrando...")
   c=cipher(s,pub)
   print -c
   print ("Descifrando..."),decipher(c,priv)
   print ("Probando firmas...")
   print ("Firmando...")
   f=sign(s,priv)
   print ("Comprobando firma..."),checksign(s,f,pub)

if __name__==("__main__"):

   if len (sys.argv) >1:
        lonx=int(sys.argv[1])
   else:
       lonx=int(raw_input("Numero de bits:"))

Pero de da error en estas líneas:
   if len (sys.argv) >1:
        lonx=int(sys.argv[1])

Y como no sé mucho de programación no sé cuál es el problema. Si alguien me puede ayudar se lo agradecería mucho :), si este código no funciona alguien sabría decirme alguno?
Uso la versión 3.5.3 y estoy en windows 7

Muchas gracias por su atención.




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)