Generador de claves:
from random import randint def generarClaves(cantidad, nombre): a = 'abcdefghijklmnopqrstuvwxyz ' largoClave = 80 for i in range(cantidad): clave = list() for j in range(largoClave): letra = a[randint(0, len(a)-1)] clave.append(letra) clave.append("\n") guardarClaves(clave, nombre) def guardarClaves(clave, nombre): clave = "".join(clave) archivo = open(str(nombre), "a") archivo.write(clave) archivo.close() otro = open("copia"+str(nombre), "a") otro.write(clave) otro.close() cantidad = int(raw_input("Dame la cantidad de claves a generar: ")) nombre = raw_input("Dame el nombre del archivo: ") generarClaves(cantidad, nombre)
Encriptacion-Desencriptación:
def main(mensaje, nombreA): clave = convertirMensajeAnsi(leerArchivo(nombreA)) mensaje = convertirMensajeAnsi(mensaje) opcion = raw_input('Escoge 1 encriptar, 2 desencriptar: ') if(opcion == '1'): enc = "".join(modulo(mensaje, clave)) print "encriptado: "+str(enc) if(opcion == '2'): des = "".join(moduloD(mensaje, clave)) print "desencriptdo: "+str(des) def modulo(mensaje, clave): enc = list() for i in range(len(mensaje)): enc.append(encriptar(mensaje[i], clave[i])) return enc def moduloD(mensaje, clave): enc = list() for i in range(len(mensaje)): enc.append(desencriptar(mensaje[i], clave[i])) return enc def encriptar(mensaje, clave): enc = int((int(mensaje) + int(clave))%123) return chr(enc) def desencriptar(mensaje, clave): enc = int((int(mensaje) - int(clave))%123) return chr(enc) def convertirMensajeAnsi(mensaje): a = list() for letra in mensaje: ansi = str(ord(letra)) if(len(ansi) < 3): ansi = "0"+str(ansi) a.append(ansi) return a def leerArchivo(nombreA): archivo = open(str(nombreA), 'r+') linea = archivo.readline() raw_input() nuevo = "".join(archivo.readlines()[0:]) open('b.txt', 'w+').write(nuevo) return linea mensaje = raw_input("Ingresa el mensaje: ") nombreA = raw_input("Ingresa el nombre del archivo que cont. claves: ") main(mensaje, nombreA)
Imagen:
Les dejo una captura de una prueba que hice.
Comentarios:
Me falta pulir un poco más el código, ya que unos métodos se repiten o algunas lineas que se pueden simplificar u optimizar.
El reporte sí ocuparía algo de pulido, pero en términos técnicos está bien. Van 4 pts.
ResponderEliminar