Then I create a random key with the length of the binary string (that is saved in a file), and I apply XOR.
The result is encrypted message, now I created decrypt functions, and you can read the original message.
The code is all commented to understand him better.
I leave screenshot of several runs to see how it changes the encrypted message can fit the key.
Code:
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() | |
Results:
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
El mensaje original es: | |
Hola esta es la primer tarea de la materia de criptografia one time pad consiste en crear alguna clave para un texto aleatoriamente y guardarlo en archivos el mensaje original y la clave una vez que fue descifrado puede generar una nueva clave y eliminarla cuando ya fue descifrado | |
Mi mensaje encriptado | |
11110010011111010001001001110011000011010011010011100101011011101001101011100001001110110111011000000010110110111101111001001001010011110111110000010100010010110001111101111011101011011111001000110000110110011000111100111111101101101001100101101110010010100010001000001001011110110110011010101011011010101101111100100001011000000110000111001111101000111100111110101001010111000101011101101001111101000001110101000001000101110101110001010001100110111000111011010101010011110101110110101100000001001111101000001110000001100001100110000000011011011100010001110000001100011001001111011110011011001011111100011111100010100000111010110000110000000001011011110011110001110001010111100101110110100111100111010000111100001101111100010111001001001010110100110010001100100000110101010000101010000100101111001001010000011000110110010110101011100011100100100110100111101111000101011101101011000100101100000010101001001010010010011010100001110010101011111110001010111101001000111010011101011000100010111010111111000101111100011000001011010110000000001110001000100001000100010100010111001000011100111001111011101100011100011010000100011010000000100000000110111000001100110110101010010000001000110101001001101000000100001001100010111010101101001000110101110101100100011101100101011110000110101010010010101101110100011111010000110000110111110111100110101010101100101011110000111001011110011100110011100111110110001110100011011110101101101010111110010100000111110110000011101001011011000011100111001001010100011011010111001111010000110110000001000010101000001110001000011001101011101111011000000000101101100010101010100100011010101110010000010111110101001100101011000110010010000111000011001001100110100111001000000110101000111111001011001001000011001101101010110000011001100110101000100111010010011111010111000000110000100000000000010010000110111110011100010100100100101110101110101001010100011101011111001010010111110110100010011100110101100001001101100110001111101111111111010010110111111101000000011011111001010101000100000011111011110000100011010111100001001011000100110110111000110111011010111111010000011001100010011010010110100001010000001110001011110101101100101000100001010101000111010100001001100011010011010000000001000100101111011000000001001110000110100000110100001110101011010111010010000011001000010000110101011110100101111100101000000000000111001111011011011101111111110001101110101000000111100000100111011111110011000001101111111110111000111100000011000110010010010111101011010110010100010010000101001011011111101101001110011110001110100011100011010100000101110100001000110000110011011101100100110111101001100001110110100100100001101000001100000110011010011001 | |
**Desencriptando ... | |
**Abro el archivo para leer la clave | |
**Este es el texto cifrado | |
Hola esta es la primer tarea de la materia de criptografia one time pad consiste en crear alguna clave para un texto aleatoriamente y guardarlo en archivos el mensaje original y la clave una ve zque fue descifrado puede generar una nueva clave y eliminarla cuando ya fue descifrado | |
**Ahora elimino la clave para que nadie mas pueda leer mi mensaje | |
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
El mensaje original es: | |
Hola esta es la primer tarea de la materia de criptografia one time pad consiste en crear alguna clave para un texto aleatoriamente y guardarlo en archivos el mensaje original y la clave una vez que fue descifrado puede generar una nueva clave y eliminarla cuando ya fue descifrado | |
Mi mensaje encriptado | |
11001001110110100000110111101110110001101100010010000101100110111101100000111010100001111101010100111001111010100001000001001100010010100010110000100100111010111000011011101111110100110000000101111111100000110001000101011101000000110001001010110101000011111010000111001011001101100001010100010100001011110100001110100110110001101110101000010111101010100000001001111011001110011111110001110100101101001111010101000010110010000110101111001011100101100000000010100010010111101011111010001111000001110111011010010000010010011011010100110100000110010010110011000100100111100010110110111111100011110010011110110110100010001111100011001011001011111001101110010000000111101011011111111001011010010010011001111010011000110101100010011111011001000000101010000011111100100001011001111001010110001000000011100111010001001111101011011001000000100011111111000100101010111100110111010101001110111011001110011011011011110100010000011010010100000011110000110101110100001000100001011000100101011000101000111111000010000000111110101001111111011101000111111001111010101000101101101000001001001011100001000011111010001001110000110001101100100110100111001110110100111111110010111000101011100010101011101010001011001000000110010010110000101100000101101011011100101010001000011101000000101101110010101100100000001110010110011011100000011011001001000010101101001000010010000000101011010100101010011101011000011010110011101000011010111101111010011010011011100000111000100111100111000100011110010100111011001010111011111001011110111111111100100101001110101100011000001011000000001010010001000111000000010111011101010111001111111110001110101000110001110100101000000010111110010001100000000001111010110010110011001110111000000111011000001111001101100010111010010010011100010111111111111111100100011011011100101111011100011011000010011001010110001000101010101001011010001110100011101011011010010100100111010010101001110101010100111110101110000111110001100011001000101110001100011001001011011000110000001010111100110011111010111110000010101110111111000101111011100000101110010100010011100001001000110101011110011010011110000101001111110011100001000010010011011011101000110100111100010000101110001101111000101001010000110111100111110011100111111100010100000111100111000000110101011111100001111101101110110100101110111100110110000100010110101000100110000001000001000110100001000000001010011100010110111100111110000000011111100001101110101001101100001010010110101111111111111111100000111010000100111001101001000011000000010110010010101011000011110011110011101110001011010000010010010101100000111001000111111110010110011101111000011000000000000011100110101010000110010101110001101111101001010001 | |
**Desencriptando ... | |
**Abro el archivo para leer la clave | |
**Este es el texto cifrado | |
Hola esta es la primer tarea de la materia de criptografia one time pad consiste en crear alguna clave para un texto aleatoriamente y guardarlo en archivos el mensaje original y la clave una ve zque fue descifrado puede generar una nueva clave y eliminarla cuando ya fue descifrado | |
**Ahora elimino la clave para que nadie mas pueda leer mi mensaje |
Avoid ambiguos abbreviations like "hw" (could be homework or hardware :P). The point was to generate first a one time pad, that is, a collection of keys, and then make two replicas of the pad. Then, to encrypt, person A uses her pad, and to decrypt, person B uses his - or vice versa. You receive 4 pts for the exercise.
ResponderEliminar