Breve explicación:
1-. Primero se crea las llaves en una archivo de texto, todas las llaves son binarios aleatoriamente
2-. Escribimos nuestro mensaje
3-. Lo Encriptamos
Forma de Encriptación:
Por ejemplo si nuestro mensaje representado en código binario fuera: 0010101
y nuestra llave fuera: 0101010
Por método exor quedaría de la siguiente manera:
mensaje = 0010101
llave = 0101010
Mensaje encriptado = 0111111
Posteriormente se desencripta con la misma llave donde el otro usuario por medio de la libreta sabrá cual es y al finalizar esta llave sera eliminada.
Aquí el código:
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
import random | |
from numpy import * | |
#maria = open("libreta2.txt","r","w") ## libreta quien resive | |
salida = [] | |
recuperador = [] | |
mensaje = [] | |
inicio = 0 | |
final = 7 | |
a = 0 | |
b = 7 | |
lineas = 0 | |
def crearlibretas(): ## aqui creamos las libretas para la encriptacion | |
x = 0 | |
y = 0 | |
pepe = open("libreta1.txt","w") ##libreta el que envia | |
ana = open("libreria2.txt","w") | |
while y<=20: | |
while x<= 20: | |
numeror = random.randint(0,2) ##valor random entre: 0<= x <2 | |
#float(numeror) | |
pepe.write(str(numeror)) ## escribimos el caracter | |
ana.write(str(numeror)) | |
# maria.write(str(numeror)) ## escribimos el mismo caracter | |
x = x + 1 | |
#print "y = ",y,"" | |
pepe.write("\n") ##salto de linea en el archivo | |
ana.write("\n") | |
#maria.write("\n") ##salto de linea en el archivo | |
x = 0 | |
y = y + 1 | |
pepe.close() | |
ana.close() | |
def encriptar(envio): | |
global inicio ## llamamos la variable global inicio es para enviar en que lugar nos quedamos en la cadena de salida | |
global final ##llamamos la variable global final es para enviar en que lugar nos quedamos en la cadena de salida | |
n = 0 | |
# sigue = 0 | |
y = 0 | |
maria = open("libreta1.txt","r") ##abrimos la libreta para encriptar | |
x = 0 | |
print envio | |
msge = raw_input("Dime tu mensaje: ") ##pedimos el mensaje a encriptar | |
tam = len(msge) ##medimos la longuitud del mensaje | |
print "tamano: ",tam,"" | |
contador = 0 ##indisealisamos el contador a 0 para la cadena de binarios de cada uno de los caracteres | |
for i in maria.xreadlines(): ##empesamos a leer linea por linea del archivo | |
dato = i | |
if n == 0: ##esto era de prueba para elegir la inea pero ya no se ocupa en si | |
print "si entro a codificar" | |
while y < tam: ##para leer la cdena que el usuario tecleo | |
#print contador | |
letra2 = ord(msge[y]) ##convertimos a ascii el mensaje | |
binario = bin(letra2) ##convertimos en binario el ascii | |
taml = len(binario) ##medimos la longuitud del binario | |
taml = taml - 2 ##es para no contar los primeros carcteres del binario que nos salia 0b | |
#print "tam1 = ",taml,"" | |
print "binario de las letras",binario,"letra: ",msge[y],"" | |
if msge[y] == " ": ##el espacio tiene un binario menos que las demas letras | |
salida.append(2) | |
contador = contador + 1 | |
#if n == 0: | |
while x < taml: #inicia el ocultamiento | |
# print "binario de las letras",binario,"letra: """ ##haciendo encriptacion por metodo exor | |
if binario[x + 2] == dato[x]: | |
print "binario =",binario[x + 2],"dato = ",dato[x],"" ##si es igual la cadena 0 y 0 o 1 y 1 agregamos un cero en la cadena de salida | |
salida.append(0) | |
#x = x + 1 | |
else: | |
print "binario =",binario[x + 2],"dato = ",dato[x],"" ##si es diferente las entradas de binario agregamos un 1 a la candena de salida | |
salida.append(1) | |
#salida[x] = 1 | |
x = x + 1 | |
contador = contador + 1 | |
if contador == 7: ##si ya son 7 datos esto quiere desir que los caracteres an sido encriptados y nos pasamos a desencriptar | |
#desencriptar(contador) | |
#contador = 0 | |
#desencriptar(inicio,final) | |
desencriptar() | |
final = final + 7 ##agregamos para los nuevos datos | |
inicio = inicio + 7 ##agregamos para los nuevos datos por la salida que se sigue acumulandose los 0 y 1 | |
contador = 0 | |
y = y + 1 | |
#contador = contador + 1 | |
x = 0 | |
# sigue = sigue + 1 | |
print "salida= ",salida,"" | |
maria.close() | |
#sigue = sigue + 1 | |
#salida = [] | |
#mensaje = [] | |
## a desencriptar yupi | |
def desencriptar(): | |
global inicio ##llamamos valores globales | |
global final ##llamamos valores globales | |
partida = inicio | |
fina = final | |
print "desencriptando" | |
desencriptador = open("libreta1.txt","r") #abrimos libreta | |
tamsalida = len(salida) | |
y = 0 | |
x = 0 | |
n = 0 | |
a = 0 | |
valor = 0 | |
cosa = list(recuperador) ##esto lo usaremos para desifrar el mensaje | |
contador = 0 | |
#partida = inicio | |
#fina = final | |
for i in desencriptador.xreadlines(): ##empesamos a leer de nuevo nuestras llaves | |
dato = i ##guardamos la llave | |
if n == 0: ##este realmente no es necesario | |
#while partida < fin: | |
while partida < fina: ##iniciamos desde nos quedamos en la ultima iteracion | |
#while y < partida | |
numero = int(dato[x]) | |
contador = contador + 1 | |
if salida[partida] == "2": ##si encuentra un dos e sque existe un espacip | |
#print "hay un espacio" | |
contador = 0 | |
else: | |
if salida[partida] == numero: ##si es igual pues se agrega un cero | |
# print "salida =",salida[partida],"dato = ",dato[y],"" | |
# cosa[y + 2] = 0 | |
cosa.append(0) | |
else: | |
# print "salida =",salida[partida],"dato = ",dato[y],"" | |
#cosa[y + 2] = 1 | |
cosa.append(1) ##si es diferente se agrega un uno | |
x = x + 1 | |
partida = partida + 1 ##repetimos para los demas caacteres | |
clave = i ##solo para imprimir | |
n = n + 1 #para que no lo haga de nuevo ya que no hay nada que desifrar | |
contador = contador + 1 ##no necesario | |
##impresiones | |
print "clave yusada: ",clave,"" | |
print"binario recuperado",cosa,"" | |
hahabit=len(cosa) ##no es necesario | |
bits = [] ##no necesario | |
total = len(cosa) ##tampoco necesario | |
ahaha = 0 ##si necesario | |
print "total = ",inicio,"fin:",final,"" | |
partida = partida - 7 ##es para saber desde donde iniciaremos para cambiar de binario a ascii | |
##cambiando de binario a caracteres | |
while ahaha < 7: | |
#print cosa[ahaha] | |
if cosa[ahaha] == 1: | |
valor=2*valor+1 | |
hahabit -=1 | |
else: | |
valor=2*valor | |
# apartida = partida + 1 | |
#partida = partida + 1 | |
ahaha = ahaha + 1 | |
caracter = chr(valor) | |
cosa = [] | |
#bits | |
##imprimimos el mensaje yupi desifrado | |
print "valor = ",valor,"" | |
mensaje.append(caracter) | |
print str(mensaje).strip('[]') | |
#mensaje.join(mensaje.split()) | |
def main(): | |
global lineas ##para borrar las lineas | |
##algunas variables fundamentales para ciclos | |
i = 0 | |
n = 0 | |
inicio = 0 | |
final = 7 | |
crearlibretas() ##creamos las llaves para el ocultamiento | |
quine = 0 ## este nos dira quien le toca enviar el mensaje | |
##nuestras personas fictisias | |
enviar1 = 'ale' | |
enviar2 = 'ana' | |
y = 0 | |
##se repitira el proceso 20 veces | |
while i < 20: | |
j = 0 | |
if quine == 0: | |
encriptar(enviar1) ##encriptamos | |
quine = 1 | |
cantidad = len(mensaje) | |
##esto es para borrar las llaves ya utilizadas | |
while j < cantidad: | |
mensaje.pop() | |
j = j + 1 | |
contenido ='' | |
borrador = open("libreta1.txt") ##libreta el que envia | |
for line in borrador: | |
linea = line.split(',') | |
print "linea: ",linea, "lineas: ",lineas,"y:",y,"" | |
if lineas != y: | |
#contenido += line | |
contenido += line | |
else: | |
print "borrando linea...." | |
y = y + 1 | |
#else: | |
y = 0 | |
borrador.close() | |
nuevo = open("libreta1.txt","w") | |
nuevo.write(contenido) | |
nuevo.close() | |
else: | |
encriptar(enviar2) ##encriptacion para la otra persona | |
cantidad = len(mensaje) | |
##proceso para borrar lineas de archivos en este caso la llave | |
while j < cantidad: | |
mensaje.pop() | |
j = j +1 | |
quine = 0 | |
borrador = open("libreta1.txt") ##libreta el que envia | |
for line in borrador: | |
linea = line.split(',') | |
if lineas != y: | |
contenido += line | |
y = y + 1 | |
y = 0 | |
borrador.close() | |
nuevo = open("libreta1.txt","w") | |
nuevo.write(contenido) | |
nuevo.close() | |
lineas = lineas + 1 | |
i = i + 1 | |
j = 0 | |
main() | |
##thats all :S |
Aquí unas impresiones de pantalla:
Aquí se genera las llaves y se nos pide el mensaje
Empezamos a encriptar:
En esta imagen si vemos en la parte superior derecha ya nos desifro el mensaje y pasa a borrar la llave usada, aquí solo se muestra en la terminal las demás llave con fines educativos, lo correcto es no mostrarlas.
y posteriormente el otro usuario dará su mensaje y se repetirá el proseso:
Thanks
Tu ortografía es un desastre y el código no está muy limpio tampoco. Pero está bien lo que haces. Van 4 pts.
ResponderEliminar