Created
August 23, 2012 04:43
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
#!/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