Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """ Método de Encriptacion y Desencriptacion, se le indica el nombre y
- ubicación del archivo de llaves, el mensaje a encriptar o desencriptar, que
- proceso realizara Encriptado 'E' o Desencriptado 'D' por omisión se usa 'E'.
- """
- def E(M, archivo, tipo='E'):
- # Abecedario para tomar y reemplazar las posiciones del mensaje encriptado y a encriptar.
- ABC = ascii_lowercase+' 1234567890'
- # Para evitar errores aseguro que todo el mensaje este en minúsculas.
- M = M.lower()
- # Lee el archivo de llaves y las asigno a la variable keys.
- keys = leerListaKey(archivo)
- # Verifico la longitud de todas las listas para usarlas en futuras validaciones.
- (largoM, largoKey, largoABC) = (len(M), len(keys[0]), len(ABC))
- # Inicializo variable donde concatenare el texto cifrado o descifrado.
- ciphertext = ''
- # Variable para controlar si es adicion o sustraccion, se multiplica por el valor de la llave
- # antes de ser sumada, Encriptar 1, Desencriptar -1.
- e = 1 if tipo == 'E' else -1
- if largoM > largoKey:
- # Itera la cantidad de veces que se necesitara una llave completo.
- for i in range(0,(largoM / largoKey)):
- key = keys.pop(0) # Obtengo la llave y la elimino de la lista.
- for j in range(len(key)): # Se itera sobre la longitud de la llave obtenida anteriormente.
- # Realizo la operacion (suma o resta) para obtener la nueva posicion, y se verifica si
- # supera la longitud del abecedario con valPosicion y se concatena la letra resultante
- # con el texto cifrado.
- ciphertext += ABC[valPosicion(ABC.index(M[j+(i * largoKey)])+(int(key[j])*e), largoABC)]
- resto = largoM% largoKey
- # Se obtiene una llave mas en caso de faltar algunas letras menores a una llave.
- if resto > 0: key = keys.pop(0)
- # Se itera para la cantidad de letras faltantes largo mensaje modulo largo llaves.
- for i in range(resto):
- ciphertext += ABC[valPosicion(ABC.index(M[i+((largoM/largoKey) * largoKey)])+(int(key[i])*e), largoABC)]
- else:
- key = keys.pop(0)
- # Itero sobre la longitud del mensaje ya que deducimos que su longitud es
- # menor a la de una llave.
- for j in range(len(M)):
- # Concatenamos el valor resultante de la operacion de igual forma que antes
- ciphertext += ABC[valPosicion(ABC.index(M[j])+(int(key[j])*e), largoABC)]
- # una vez terminado el proceso, las llaves restantes se guardaran en el mismo archivo
- # eliminando las anteriores.
- guardarArchivo(keys, archivo)
- return ciphertext # Se retorna el texto cifrado.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement