Advertisement
TrackMaze

Criptografía por Transposiciones Geometricas

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