Skip to content

Instantly share code, notes, and snippets.

@ErikRamses
Created July 3, 2013 09:16
Show Gist options
  • Save ErikRamses/5916575 to your computer and use it in GitHub Desktop.
Save ErikRamses/5916575 to your computer and use it in GitHub Desktop.
Algoritmo RSA (Incompleto)
#Algunas funciones fueron obtenidas de la siguiente URL: http://blog.hackxcrack.es/2011/11/introduccion-la-criptografia-moderna_09.html
import hashlib
import random
def hacerentero(s): #Se utiliza una funcion para hacer el mensaje a enteros
n = 0
for c in s:
n <<= 8 #evaluando los digitos ingresados por el usuario
n += ord(c) #se obtiene el orden de c
return n
def esPrimo(n): #Funcion que checa si el numero es primo
raiz=int(sqrt(n)); #Se obtiene su raiz para evaluar en una condicion
for i in range(2,raiz+1):
if n%i==0:
return False;
return True;
def cifrado(mensaje, public): #Funcion que cifra el texto
n = hacerentero(s) #Se guarda el mensaje hecho entero en n
c = modex(n, public[1], public[0]) #Se guarda en c el mensaje cifrado por la clave publica
return
def descifrado(n, private): #Funcion que descifra con clave privada
p = modex(n, private[1], private[0]) #Se almacena en p el numero coprimo de q
s = hacerentero(p)
return
def entrando(mensaje,private):
s = int(hashlib.sha1(me).hexdigest(), 16) #Se almacena en un entero la representación de bits
return modex(s,private[1],private[0])
def checandoentrada(mensaje,sign,pub): #Funcion que checa las entradas a nuestro sistema
s = modex(sign,pub[1],pub[0])
h = int(hashlib.sha1(msg).hexdigest(), 16)
return s == h
def Alice(publico, privado): #Funcion que modifica el mensaje original conoce la llave publica y privada
mensaje= raw_input("Ingrese el mensaje: ")
smsint=int(hacerentero(mensaje))
return mensaje
def main():
primo= False #Se rellenan los valores necesarios o por default
primo2= False
while primo == False || primo2==False: #Sale de la condicion hasta que se ingresa un numero primo
p= int(raw_input("primo1: "))
primo=esprimo(p)
q= int(raw_input("primo2: ")) #Cuando son 2 numeros primos, termina el while
primo2=esprimo(q)
N=p*q #Empiezan calculos del algoritmo
phi = (p - 1) * (q - 1) #Se obtiene el valor de phi
e=65537
while (phi%e) == 0:
e=generadorprimo(17)
d = inverse_mod(e, phi) #Se señalaa d como el inverso modular tomando a e, phi
public = (n, e)
private = (n, d)
Alice(public, private) #Se calculan las supuestas claves publicas y las mandas a alice para que proceda a encriptar.
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment