Ocultar algunos datos se conoce como encriptación. Cuando el texto sin formato se cifra, se vuelve ilegible y se conoce como texto cifrado. En un cifrado de sustitución, cualquier carácter de texto sin formato del conjunto fijo de caracteres dado se sustituye por algún otro carácter del mismo conjunto según una clave. Por ejemplo, con un cambio de 1, A sería reemplazada por B, B se convertiría en C, y así sucesivamente.
Nota: El caso especial de cifrado de sustitución se conoce como cifrado César , donde la clave se toma como 3.
Representación matemática
El cifrado se puede representar usando aritmética modular transformando primero las letras en números, según el esquema, A = 0, B = 1,…, Z = 25. El cifrado de una letra por un desplazamiento n se puede describir matemáticamente como.
(Fase de Cifrado con turno n)
(Fase de Descifrado con turno n)
Ejemplos:
Plain Text: I am studying Data Encryption Key: 4 Output: M eq wxyhCmrk Hexe IrgvCtxmsr Plain Text: ABCDEFGHIJKLMNOPQRSTUVWXYZ Key: 4 Output: EFGHIJKLMNOPQRSTUVWXYZabcd
Algoritmo para el cifrado de sustitución:
Aporte:
- Una string de letras mayúsculas y minúsculas, llamada Texto sin formato.
- Un número entero que denota la clave requerida.
Procedimiento:
- Crea una lista de todos los personajes.
- Cree un diccionario para almacenar la sustitución de todos los caracteres.
- Para cada carácter, transforme el carácter dado según la regla, dependiendo de si estamos encriptando o desencriptando el texto.
- Imprime la nueva string generada.
A continuación se muestra la implementación.
Python3
# Python program to demonstrate # Substitution Cipher import string # A list containing all characters all_letters= string.ascii_letters """ create a dictionary to store the substitution for the given alphabet in the plain text based on the key """ dict1 = {} key = 4 for i in range(len(all_letters)): dict1[all_letters[i]] = all_letters[(i+key)%len(all_letters)] plain_txt= "I am studying Data Encryption" cipher_txt=[] # loop to generate ciphertext for char in plain_txt: if char in all_letters: temp = dict1[char] cipher_txt.append(temp) else: temp =char cipher_txt.append(temp) cipher_txt= "".join(cipher_txt) print("Cipher Text is: ",cipher_txt) """ create a dictionary to store the substitution for the given alphabet in the cipher text based on the key """ dict2 = {} for i in range(len(all_letters)): dict2[all_letters[i]] = all_letters[(i-key)%(len(all_letters))] # loop to recover plain text decrypt_txt = [] for char in cipher_txt: if char in all_letters: temp = dict2[char] decrypt_txt.append(temp) else: temp = char decrypt_txt.append(temp) decrypt_txt = "".join(decrypt_txt) print("Recovered plain text :", decrypt_txt)
Producción:
Cipher Text is: M eq wxyhCmrk Hexe IrgvCtxmsr Recovered plain text : I am studying Data Encryption