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