Advertisement
TrackMaze

Criptografía por Transposiciones Geometricas

Mar 21st, 2013
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.26 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: utf8 -*-
  3. #######################
  4. #Encode/Decoder
  5. #Criptografia por Transpocision geometrica
  6. #by
  7. #TrackMaze Hacking Group
  8. #######################
  9. #Trackmaze.blogspot.com
  10. #######################
  11. #Marzo de 2013
  12. #######################
  13.  
  14. def Create_matriz(mensaje,columnas,opcion):     #tenemos dos maneras de crear la matriz, ya se horizontal o vertical (filas - columnas)
  15.     matriz=[]
  16.     mensaje=mensaje.replace(" ","")
  17.     if (len(mensaje)%columnas!=0)#verificamos si la division es exacta
  18.         mensaje=mensaje+"x"*(columnas-(len(mensaje)%columnas))  #rellenamos con x, las columnas faltantes
  19.    
  20.     i=len(mensaje)/columnas #obtenemos el numero de filas
  21.    
  22.     if (opcion=="horizontal")#primera forma, la horizontal (por filas)
  23.         for x in range (0,i):   #recorremos las filas
  24.             fila=[] #aqui almacenaremos as columnas
  25.             for y in range(0,columnas): #recorremos las columnas
  26.                 fila.append(mensaje[y]) #agregamos cada caracter a la fila
  27.             mensaje=mensaje[columnas:]  #recortamos el mensaje hasta el numero de columnas que hayamos creado
  28.             matriz.append(fila) #agregamos la fila a la matriz final
  29.         return matriz   #retornamos la matriz final
  30.     else:   #segunda forma, la vertical (por columnas)
  31.        
  32.         for h in range(0,i):    #primero creamos las filas
  33.             matriz.append([])
  34.        
  35.         for y in range (0,columnas):    #recorremos las columnas
  36.             for x in range(0,i):    #recorremos las filas
  37.                 matriz[x].append(mensaje[x])    #a cada fila x la agregamos el caracter x del mensaje
  38.             mensaje=mensaje[i:] #recortamos el mensaje hasta las filas que hayamos utilizado
  39.         return matriz   #retornamos la matriz final
  40.  
  41. def lectura(opcion,matriz):     #las dos posibles maneras de leer la matriz final, de forma horizontal o vertical
  42.     n_fila=len(matriz)  #cantidad de filas
  43.     n_columnas=len(matriz[0])   #cantidad de columnas
  44.     texto=""    #texto final
  45.    
  46.     if (opcion=="horizontal")#leemos de forma horizontal, por filas
  47.         for i in range(0,n_fila):   #recorremos las filas
  48.             for j in range(0,n_columnas):   #recorremos las columnas
  49.                 texto+=matriz[i][j] #almacenamos los valores, la fila se mantiene y la columna varia
  50.             texto+=" "  #al terminar una fila, dejamos un espacio
  51.         return texto    #retornamos el texto final
  52.        
  53.     else:   #leemos de forma vertical, por columnas
  54.         for j in range(0,n_columnas):   #recorremos las columnas
  55.             for i in range (0,n_fila)#recorremos las filas
  56.                 texto+=matriz[i][j] #almacenamos los valores, la columna se mantiene y la fila varia
  57.             texto+=" "  #despues de cada columna, se deja un espacio
  58.             #print texto
  59.         return texto    #retornamos el texto final
  60.  
  61. def cifrado_clave(matriz,clave):
  62.     n_fila=len(matriz)  #cantidad de filas
  63.     n_columnas=len(matriz[0])   #cantidad de columnas
  64.     texto=""    #texto final
  65.    
  66.     new=[]
  67.     for i in range(0,len(clave)):
  68.         new.append(clave.index(str(i+1)))
  69.    
  70.     for y in new:
  71.         for x in range (0,n_fila):
  72.             texto+=matriz[x][int(y)]
  73.         texto+=" "
  74.     return texto
  75.    
  76. def lectura_clave(matriz,clave):    #esta sera la funcion que descifre el mensaje con una clave determinada
  77.     n_fila=len(matriz)  #cantidad de filas
  78.     n_columnas=len(matriz[0])   #cantidad de columnas
  79.     texto=""    #texto final
  80.    
  81.     #teniendo la clave de descifrado, leemos de nuevo la matriz pero en dicho orden
  82.     for i in range (0,n_fila)#recorremos las filas
  83.         for x in clave: #recorremos el orden de las claves
  84.             texto+=matriz[i][int(x)-1]  #guardamos el texto
  85.         texto+=" "
  86.     return texto    #retornamos el texto
  87.    
  88. print """  _______                                  _      _
  89. |__   __|                                (_)    (_)
  90.    | |_ __ __ _ _ __  ___ _ __   ___  ___ _  ___ _  ___  _ __  
  91.    | | '__/ _` | '_ \/ __| '_ \ / _ \/ __| |/ __| |/ _ \| '_ \
  92.    | | | | (_| | | | \__ | |_) | (_) \__ | | (__| | (_) | | | |
  93.   _____|  \__,_|_| |_|___| .__/ \___/|___|__\___|_|\___/|_| |_|
  94.  / ____|                 | |     | |      (_)TrackMaze.blogspot.com
  95. | |  __  ___  ___  _ __ ___|  ___| |_ _ __ _  ___ __ _
  96. | | |_ |/ _ \/ _ \| '_ ` _ \ / _ | __| '__| |/ __/ _` |
  97. | |__| |  __| (_) | | | | | |  __| |_| |  | | (_| (_| |
  98.  \_____|\___|\___/|_| |_| |_|\___|\__|_|  |_|\___\__,_|
  99.    TrackMaze Hacking Group 2013
  100.  
  101. $Opciones:
  102.     #1# Cifrar texto sin Clave
  103.     #2# Descifrar texto sin Clave
  104.     #3# Cifrar texto con Clave
  105.     #4# Descifrar texto Con clave
  106.     #5# Salir"""
  107.    
  108. while True:
  109.     print "$Entrada: "
  110.     op=input("  #Opcion:")
  111.    
  112.     if(op==1)#---Cifrar texto sin clave
  113.         mensaje=raw_input("     #Ingrese el mensaje a Cifrar: ")
  114.         columnas=input("    #ingrese la cantidad de columnas: ")
  115.         opcion=raw_input("  #Modo de cifrado, horizontal o vertical: ")
  116.        
  117.         matriz=Create_matriz(mensaje,columnas,opcion)   #Creamos la matriz con la opcion estipulada
  118.         if (opcion=="horizontal")#segun la opcion, para poder cifrar tenemos que leer la matriz con la opcion contraria (horizontal -> vertical)
  119.             opcion="vertical"
  120.         else:
  121.             opcion="horizontal"
  122.        
  123.         tex_cifrado=lectura(opcion,matriz)
  124.         print "     #Texto Cifrado: ",tex_cifrado
  125.        
  126.     elif (op==2):   #---Descifrar texto sin clave
  127.         mensaje=raw_input("     #Ingrese el mensaje a Descifrar: ")
  128.         columnas=input("    #Ingrese la cantidad de columnas: ")
  129.         opcion=raw_input("  #Modo de Descifrado, horizontal o vertical: ")
  130.        
  131.         matriz=Create_matriz(mensaje,columnas,opcion)
  132.         if (opcion=="horizontal"):
  133.             opcion="vertical"
  134.         else:
  135.             opcion="horizontal"
  136.        
  137.         tex_cifrado=lectura(opcion,matriz)
  138.         print "     #Texto Descifrado: ",tex_cifrado
  139.        
  140.     elif (op==3):   #---Cifrar texto con clave
  141.         mensaje=raw_input("     #Ingrese el mensaje a Cifrar: ")    #ingreso del mensaje
  142.         columnas=input("    #Ingrese la cantidad de columnas: ")    #la cantidad de columnas a utilizar
  143.         clave=raw_input("   #Ingrese la clave separada por comas (1,2,..,n): ") #la clave
  144.        
  145.         matriz=Create_matriz(mensaje,columnas,"horizontal")
  146.         clave=clave.split(",")
  147.         tex_cifrado=cifrado_clave(matriz,clave)
  148.        
  149.         print " #Texto Cifrado: ",tex_cifrado
  150.        
  151.     elif (op==4):
  152.         mensaje=raw_input("     #Ingrese el mensaje a Descifrar: ")
  153.         columnas=input("    #Ingrese la cantidad de columnas: ")
  154.         clave=raw_input("   #Ingrese la clave: ")
  155.        
  156.         matriz=Create_matriz(mensaje,columnas,"vertical")
  157.         clave=clave.split(",")
  158.        
  159.         tex_descifrado=lectura_clave(matriz,clave)
  160.         print "El texto decifrado es: ",tex_descifrado
  161.  
  162.     elif (op==5):
  163.         break  
  164.     else:
  165.         print " [+] Ingresa una Opcion Valida [+]"
  166.        
  167.     print "\n"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement