Cifrado de sustitución

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.
 

E_n(x)=(x+n)mod\ 26

(Fase de Cifrado con turno n) 

D_n(x)=(x-n)mod\ 26

(Fase de Descifrado con turno n) 

substitution-cipher

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

Publicación traducida automáticamente

Artículo escrito por AmiMunshi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *