Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''One-Time Pad'''
- from random import randint
- from sys import argv
- alfabeto= ['a','b','c','d','e','f','g','h','i', 'j', 'k', 'l', 'm', 'n',' o', 'p', 'q',' r', 's',' t', 'u', 'v', 'w', 'x', 'y', 'z']
- numerosdelalf= [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
- mensaje=None
- '''Metodo que genera la libreta que
- contiene claves que solo se utilizaran una vez '''
- def generaPad(lineas,caracteres):
- hoja=[]#libreta/hoja
- for j in range(lineas):
- hoja.append([])#libreta con hojas
- for i in range(caracteres):
- num=randint(0,caracteres)
- hoja[j].append(num)#hojas
- return hoja
- '''Imprime lista de listas '''
- def imprimePad(pad):
- hojas=len(pad)
- for i in range(hojas):
- print pad[i]
- '''Genera el Archivo pad.dat (libreta) '''
- def genArchivo(hoja):
- archivo = open('pad.dat','w')
- lineas=len(hoja)
- for i in range(lineas):
- archivo.write(str(hoja[i]))
- archivo.write('\n')
- archivo.close()
- '''Convierte el Mensaje original
- a una lista de numeros correspondientes'''
- def conversorNum(mensaje):
- x=len(mensaje)
- mclave=[]
- if x>25:
- #aun no valido esto
- print 'El mensaje es muy grande intentelo de nuevo'
- mensaje= raw_input('Mensaje (maximo 25 caracteres) : ')
- conversorNum(mensaje)
- for i in range(x):
- if mensaje[i] in numerosdelalf:
- mclave=mensaje.index(mensaje[i])
- return mclave
- '''Convierte un conjunto de numeros
- a las Letras correspondiente'''
- def conversorLet(numeros):
- x=len(numeros)
- mensaje=[]
- for i in range(x):
- if numeros[i] in numerosdelalf:
- #numero correspondiente al alfabeto
- pos= numerosdelalf.index(numeros[i])
- mensaje[i].append(alfabeto[pos])
- return mensaje
- '''Metodo que cifra en mensaje sumando los emelentos de la key(clave)
- y realizando a esa suma un modulo de la longitud del alfabeto '''
- #para cifrar + mod(len(alfabeto))
- def cifraMensaje(mensaje,key):
- cifrado=[]
- for i in range(len(mensaje)):
- result=mensaje[i]+key[i]
- result=result%(len(numerosdelalf))
- cifrado[i].append(result)#error
- return cifrado
- '''Metodo que decifra el texto cifrado que recibe como parametro
- realizando una resta de la key(clave)
- y aplicando el modulo del alfabeto'''
- #para decif - mod(len(alfabeto))
- def decifMensaje(ciftext,key):
- mensaje=[]
- for i in range(len(ciftext)):
- temp=len(numerosdelalf)
- result=temp+ciftext[i]-key[i]
- result=result%(len(numerosdelalf))
- mensaje[i].append(result)
- return mensaje
- '''Demostracion de lo que hace .___. '''
- def demo(lineas,caracteres,mensaje):
- pad=generaPad(lineas,caracteres)
- imprimePad(pad)#debug
- genArchivo(pad)#pad.dat
- print 'Mensaje:'
- print mensaje#original
- mensaje=conversorNum(mensaje)#convertir a numeros
- print 'Mensaje Convertido:'
- print mensaje#numeros correspoondientes
- c=cifraMensaje(mensaje,pad[0])#criphertext
- print 'Mensaje Cifrado:'
- print c
- m=decifMensaje(c,pad[0])#decifrado
- print 'Mensaje:'#mensaje Original :3
- print m
- '''Main donde recibo los parametros para el programa '''
- def main():
- print 'One Time Pad '
- lineas =None
- try:
- #lineas eq. hojas de la libreta
- lineas=int(argv[1])
- caracteres=int(argv[2])
- mensaje= argv[3]
- except:
- #toma valor por default excepto el mensaje
- if lineas is None:
- lineas= 10
- caracteres=25 #letras del abecedario
- mensaje= raw_input('mensaje_> ')
- demo(lineas,caracteres,mensaje)
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement