Skip to content

Instantly share code, notes, and snippets.

@ErikRamses
Created July 4, 2013 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ErikRamses/5928028 to your computer and use it in GitHub Desktop.
Save ErikRamses/5928028 to your computer and use it in GitHub Desktop.
rsa cgi python
#!/usr/bin/python2.7
# enable debugging
#El programa es producto de varias recopilaciones de rsa y ejemplos de cgi
#URLS: http://blog.hackxcrack.es/2011/11/introduccion-la-criptografia-moderna_09.html
#http://code.activestate.com/recipes/572196-rsa/
#http://cic.puj.edu.co/wiki/doku.php?id=materias:laboratorio_de_lenguajes_ii:lableng2:ejemplos1
from rsa_math import * #importamos algunas funciones para el algoritmo rsa como la generacion de primos
import cgi, cgitb #importamos las librerias para cgi
import random #importamos random
def generarclaves(bitn): #genera las claves dependiendo el numero de bits
p = genprime(bitn)
q = genprime(bitn)
n = p * q
phi = (p - 1) * (q - 1)
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 numero
def integear(s):
n = 0
for c in s:
n <<= 8
n += ord(c)
return n
def cifrar(s, public):
n = integear(s)
c = modex(n, public[1], public[0])
return c
# Convierte un numero en un string
def stringear(n):
s = []
while n > 0:
s.insert(0, chr(n & 255))
n >>= 8
return ''.join(s)
#descifra el mensaje con la llave privada
def descifrar(n, private):
p = modex(n, private[1], private[0])
s = stringear(p)
return s
try:
import hashlib
except:
print >> sys.stderr, "No se ha encontrado el modulo Hashlib, no podras firmar ni comprobar firmas"
#funciones que realizan los signos del cifrado
def signo(msg,private):
s = int(hashlib.sha1(msg).hexdigest(), 16)
return modex(s,private[1],private[0])
def checksigno(msg,sign,pub):
s = modex(sign,pub[1],pub[0])
h = int(hashlib.sha1(msg).hexdigest(), 16)
return s == h
#algoritmo rsa
def guardarvalor(archivo, valor): #funcion que guarda un valor en un archivo
f1 = open(archivo, "w") #funcion que abre el archivo con permisos de escritura
f1.write(str(valor)) #se escribe el archivo como string
f1.close() #se cierra el archivo
def Abrirllaves(archivo, usuario): #funcion para leer llaves o claves
f1 = open(archivo, "r") #Se abre el archivo de solo lectura
for element in f1:
element = i.split(",") #se separa por comas entre cada valor en i
if element[0].lower() == usuario.lower() : #el usuario se pasa a minusculas
fl.close() #cerramos archivo
return int(element[1]), int(element[2]) #se devuelve el modulo y la llave privada
fl.close()
return False
def cambio(x):
return x*3+20; #Se ajusta un cambio en el valor de x.
def verificar(usuario, y): #funcion que checa los datos ingresados
valororiginal = cargarvalores("valores.dat")
if valororiginal == y: #los compara con los valores originales
return True #si se cumple retorna verdadero
else:
return False #si no, retorna falso
def cargarvalores(archivo): #Funcion utilizada para guardar valores en un archivo
f1 = open(archivo, "r") #abrimos el archivo con sólo lectura
valor = f1.read() #se obtiene todo el contenido del archivo
f1.close() #cerramos
return int(valor) #devuelve el valor entero del archivo
def probarRSA(bitn,s):
pub,priv=generarclaves(bitn)
c=cifrar(s,pub)
descifrar(c,priv)
f=signo(s,priv)
print "Comprobando firma...",checarsigno(s,f,pub)
def main():
entrada = cgi.FieldStorage() #hacemos uso del cgi para interactuar con el formulario
if entrada.has_key("x") and entrada.has_key("usuario"): #Se verifica que se hayan llenado los campos de texto
lonx=int(entrada["x"].value)
probarRSA(lonx,str(entrada["usuario"].value))
else: #si no se encuentran entradas
x = random.randint(1, 1000) #se generan aleatoriamente
guardarvalor("valores.dat", cambio(x)) #se guardan en el archivo valores y se hace un cambio en x para poder usarlo en el algoritmo
print x #imprimimos x
main()
@GabrielGonzalezRamirez
Copy link

lo corro en py pero me da mucho errores

@ErikRamses
Copy link
Author

Hola Gabriel, este código es muy viejo, tiene 7 años aprox, sería necesario actualizarlo según la versión de python con la que se corra.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment