Skip to content

Instantly share code, notes, and snippets.

@cecyurbina
Created August 23, 2012 04:43
#!/usr/bin/python
import random
import sys
import os
def desencriptar(encriptado):
"""desencriptar, toma el mensaje encriptado
y lee la clave del archivo correspondiente
"""
f = open('Aqui_no_hay_claves', "r")
print "**Desencriptando ..."
print "**Abro el archivo para leer la clave"
k = f.read() #leo el archivo con la clave
ant = "" #me sirve para ir agregando a la cadena
for i in range(len(encriptado)): #con este for puedo obtener la frase
a = int(encriptado[i]) #original aunque aun en binario
b = int(k[i])
c = bool(a) != bool(b)
c = int(c)
c = ant + str(c)
ant = c
original = ant
iteraciones = len(original)/7 #con esto divido entre 7 la cadena
lista = [] #de caracteres para poder obtener el numero
cont = 0 #entero correspondiente al binario
separados = []
numeros = []
texto = ''
for i in range(iteraciones): #aqui obtengo el caracter que
m = original[cont:cont + 7] #corresponde al numero entero
cont = cont + 7
separados.append(m)
numeros.append(int(m, 2))
texto = texto + chr(numeros[i])
texto = texto.replace('zzz', ' ')
print "**Este es el texto cifrado"
print texto
print "**Ahora elimino la clave para que nadie mas pueda leer mi mensaje"
os.remove('Aqui_no_hay_claves')#paranoicamente elimino la clave
return texto #regreso el texto original desencriptado
def convertir_binario(texto):
"""esta funcion recibe una cadena de texto
y la convierte a binario
"""
ant = ''
for i in texto:
numero = ord(i)
binario = bin(numero)
binario = str(binario)
binario = binario.split('b')
binario = binario[1]
binario = ant + binario
ant = binario
binario = ant
return binario
def leer_archivo(archivo):
"""esta funcion se encarga de leer el
archivo que contiene el mensaje
"""
f = open(archivo, "r")
texto = f.read()
original = texto
texto = texto.replace(' ', 'zzz')
return texto, original
def escribir_archivo(k):
"""escribir en un archivo
"""
f = open('Aqui_no_hay_claves', 'w')
f.write(k)
def clave(tamano):
"""esta funcion se encarga de crear una clave
unica para el mensaje
"""
clave = ''
for i in range(tamano):
clave = str(random.randint(0, 1)) + clave
return clave
def encriptar(binario, k, tamano):
"""toma como entrada la cadena binaria, la clave
y el tamano para aplicar un xor logico y retornar
el mensaje cifrado
"""
ant = ''
for i in range(tamano):
a = int(binario[i])
b = int(k[i])
c = bool(a) != bool(b)
c = int(c)
c = ant + str(c)
ant = c
cifrado = ant
return cifrado
def main():
archivo_entrada = "mensaje"
texto, original = leer_archivo(archivo_entrada)
binario = convertir_binario(texto)
tamano = len(binario)
k = clave(tamano)
print "El mensaje original es:"
print original
print "\n"
escribir_archivo(k)
mensaje_encri = encriptar(binario, k, tamano)
print "Mi mensaje encriptado"
print mensaje_encri
print "\n"
desencriptar(mensaje_encri)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment