document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. """ Método de Encriptacion y Desencriptacion, se le indica el nombre y
  2.    ubicación del archivo de llaves, el mensaje a encriptar o desencriptar, que
  3.    proceso realizara Encriptado \'E\' o Desencriptado \'D\' por omisión se usa \'E\'.
  4.    """
  5. def E(M, archivo, tipo=\'E\'):
  6.     # Abecedario para tomar y reemplazar las posiciones del mensaje encriptado y a encriptar.
  7.     ABC = ascii_lowercase+\' 1234567890\'
  8.     # Para evitar errores aseguro que todo el mensaje este en minúsculas.
  9.     M = M.lower()
  10.     # Lee el archivo de llaves y las asigno a la variable keys.
  11.     keys = leerListaKey(archivo)
  12.     # Verifico la longitud de todas las listas para usarlas en futuras validaciones.
  13.     (largoM, largoKey, largoABC) = (len(M), len(keys[0]), len(ABC))
  14.     # Inicializo variable donde concatenare el texto cifrado o descifrado.
  15.     ciphertext = \'\'
  16.     # Variable para controlar si es adicion o sustraccion, se multiplica por el valor de la llave
  17.     # antes de ser sumada, Encriptar 1, Desencriptar -1.
  18.     e = 1 if tipo == \'E\' else -1
  19.     if largoM > largoKey:
  20.         # Itera la cantidad de veces que se necesitara una llave completo.
  21.         for i in range(0,(largoM / largoKey)):
  22.             key = keys.pop(0) # Obtengo la llave y la elimino de la lista.
  23.             for j in range(len(key)): # Se itera sobre la longitud de la llave obtenida anteriormente.
  24.                 # Realizo la operacion (suma o resta) para obtener la nueva posicion, y se verifica si
  25.                 # supera la longitud del abecedario con valPosicion y se concatena la letra resultante
  26.                 # con el texto cifrado.
  27.                 ciphertext += ABC[valPosicion(ABC.index(M[j+(i * largoKey)])+(int(key[j])*e), largoABC)]
  28.         resto = largoM% largoKey
  29.         # Se obtiene una llave mas en caso de faltar algunas letras menores a una llave.
  30.         if resto > 0: key = keys.pop(0)
  31.         # Se itera para la cantidad de letras faltantes largo mensaje modulo largo llaves.
  32.         for i in range(resto):
  33.             ciphertext += ABC[valPosicion(ABC.index(M[i+((largoM/largoKey) * largoKey)])+(int(key[i])*e), largoABC)]
  34.  
  35.     else:
  36.         key = keys.pop(0)
  37.         # Itero sobre la longitud del mensaje ya que deducimos que su longitud es
  38.         # menor a la de una llave.
  39.         for j in range(len(M)):
  40.             # Concatenamos el valor resultante de la operacion de igual forma que antes
  41.             ciphertext += ABC[valPosicion(ABC.index(M[j])+(int(key[j])*e), largoABC)]
  42.     # una vez terminado el proceso, las llaves restantes se guardaran en el mismo archivo
  43.     # eliminando las anteriores.
  44.     guardarArchivo(keys, archivo)
  45.     return ciphertext # Se retorna el texto cifrado.
');