Advertisement
alduncin

One Time Pad

Jun 27th, 2013
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.72 KB | None | 0 0
  1. '''One-Time Pad'''
  2. from random import randint
  3. from sys import argv
  4. 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']
  5. 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]
  6. mensaje=None
  7.  
  8. '''Metodo que genera la libreta que
  9.   contiene claves que solo se utilizaran una vez '''
  10. def generaPad(lineas,caracteres):
  11.     hoja=[]#libreta/hoja
  12.     for j in range(lineas):
  13.         hoja.append([])#libreta con hojas
  14.         for i in range(caracteres):
  15.             num=randint(0,caracteres)
  16.             hoja[j].append(num)#hojas
  17.     return hoja
  18.  
  19. '''Imprime lista de listas '''
  20. def imprimePad(pad):
  21.     hojas=len(pad)
  22.     for i in range(hojas):
  23.         print pad[i]
  24.  
  25. '''Genera el Archivo pad.dat (libreta) '''
  26. def genArchivo(hoja):
  27.     archivo = open('pad.dat','w')
  28.     lineas=len(hoja)
  29.     for i in range(lineas):
  30.         archivo.write(str(hoja[i]))
  31.         archivo.write('\n')
  32.     archivo.close()
  33.  
  34. '''Convierte el Mensaje original
  35.   a una lista de numeros correspondientes'''
  36. def conversorNum(mensaje):
  37.     x=len(mensaje)
  38.     mclave=[]
  39.     if x>25:
  40.         #aun no valido esto
  41.         print 'El mensaje es muy grande intentelo de nuevo'
  42.         mensaje= raw_input('Mensaje (maximo 25 caracteres) :   ')
  43.         conversorNum(mensaje)
  44.     for i in range(x):
  45.         if mensaje[i] in numerosdelalf:
  46.             mclave=mensaje.index(mensaje[i])
  47.     return mclave
  48.  
  49. '''Convierte un conjunto de numeros
  50.   a las Letras correspondiente'''
  51. def conversorLet(numeros):
  52.     x=len(numeros)
  53.     mensaje=[]
  54.     for i in range(x):
  55.         if numeros[i] in numerosdelalf:
  56.             #numero correspondiente al alfabeto
  57.             pos= numerosdelalf.index(numeros[i])
  58.             mensaje[i].append(alfabeto[pos])
  59.     return mensaje            
  60.  
  61. '''Metodo que cifra en mensaje sumando los emelentos de la key(clave)
  62.   y realizando a esa suma un modulo de la longitud del alfabeto '''
  63. #para cifrar + mod(len(alfabeto))
  64. def cifraMensaje(mensaje,key):
  65.     cifrado=[]
  66.     for i in range(len(mensaje)):
  67.         result=mensaje[i]+key[i]
  68.         result=result%(len(numerosdelalf))
  69.         cifrado[i].append(result)#error
  70.     return cifrado
  71.  
  72. '''Metodo que decifra el texto cifrado que recibe como parametro
  73.   realizando una resta de la key(clave)
  74.   y aplicando el modulo del alfabeto'''
  75. #para decif -  mod(len(alfabeto))
  76. def decifMensaje(ciftext,key):
  77.     mensaje=[]
  78.     for i in range(len(ciftext)):
  79.         temp=len(numerosdelalf)
  80.     result=temp+ciftext[i]-key[i]
  81.         result=result%(len(numerosdelalf))
  82.         mensaje[i].append(result)
  83.     return mensaje
  84. '''Demostracion de lo que hace .___. '''
  85. def demo(lineas,caracteres,mensaje):
  86.    
  87.     pad=generaPad(lineas,caracteres)
  88.    
  89.     imprimePad(pad)#debug
  90.     genArchivo(pad)#pad.dat
  91.     print 'Mensaje:'
  92.     print mensaje#original
  93.     mensaje=conversorNum(mensaje)#convertir a numeros
  94.     print 'Mensaje Convertido:'
  95.     print mensaje#numeros correspoondientes
  96.  
  97.     c=cifraMensaje(mensaje,pad[0])#criphertext
  98.     print 'Mensaje Cifrado:'
  99.     print c
  100.     m=decifMensaje(c,pad[0])#decifrado
  101.     print 'Mensaje:'#mensaje Original :3
  102.     print m
  103.  
  104. '''Main donde recibo los parametros para el programa '''
  105. def main():
  106.     print 'One Time Pad '
  107.     lineas =None
  108.    
  109.     try:
  110.     #lineas eq. hojas de la libreta
  111.         lineas=int(argv[1])
  112.         caracteres=int(argv[2])
  113.         mensaje= argv[3]
  114.     except:
  115.     #toma valor por default excepto el mensaje
  116.         if lineas is None:
  117.             lineas= 10
  118.             caracteres=25 #letras del abecedario
  119.             mensaje= raw_input('mensaje_> ')
  120.    
  121.     demo(lineas,caracteres,mensaje)
  122.        
  123. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement