Created
July 3, 2013 09:16
-
-
Save ErikRamses/5916575 to your computer and use it in GitHub Desktop.
Algoritmo RSA (Incompleto)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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