[ Foro de Python ]
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.)