Cifrado baconiano

El cifrado de Bacon o el cifrado baconiano es un método de esteganografía (un método para ocultar un mensaje secreto en lugar de solo un cifrado) ideado por Francis Bacon en 1605. Un mensaje se oculta en la presentación del texto, en lugar de su contenido. El cifrado baconiano es un cifrado por sustitución en el que cada letra se reemplaza por una secuencia de 5 caracteres. En el cifrado original, estas eran secuencias de ‘A’s y ‘B’s, por ejemplo, la letra ‘D’ fue reemplazada por ‘aaabb’, la letra ‘O’ fue reemplazada por ‘abbab’, etc. 

Cada letra se asigna a una string de cinco dígitos binarios. Estas pueden ser las letras ‘A’ y ‘B’, los números 0 y 1 o cualquier otra cosa que desee. 

Hay 2 tipos de cifrados baconianos:

  1. El cifrado de 24 letras: en el que 2 pares de letras (I, J) y (U, V) tienen los mismos textos cifrados.
Carta Código Binario
A aaaaaa 00000
B aaaab 00001
C aaaba 00010
D aaabb 00011
mi aabaa 00100
F aabab 00101
GRAMO aabba 00110
H aabbb 00111
yo, j Abaaa 01000
k abaab 01001
L ababa 01010
METRO ababb 01011
Carta Código Binario
norte Abbaa 01100
O Abbab 01101
PAGS Abba 01110
q abbbb 01111
R baaaa 10000
S baaab 10001
T baaba 10010
U, V baabb 10011
W babaa 10100
X babab 10101
Y babba 10110
Z babbb 10111
  1. El cifrado de 26 letras: en el que todas las letras tienen textos cifrados únicos.
Carta Código Binario
A aaaaaa 00000
B aaaab 00001
C aaaba 00010
D aaabb 00011
mi aabaa 00100
F aabab 00101
GRAMO aabba 00110
H aabbb 00111
yo Abaaa 01000
j abaab 01001
k ababa 01010
L ababb 01011
METRO Abbaa 01100
Carta Código Binario
norte Abbab 01101
O Abba 01110
PAGS abbbb 01111
q baaaa 10000
R baaab 10001
S baaba 10010
T baabb 10011
tu babaa 10100
V babab 10101
W babba 10110
X babbb 10111
Y bbaaa 11000
Z bbaab 11001

Cifrado

Extraeremos un solo carácter de la string y, si no es un espacio, lo reemplazaremos con su texto cifrado correspondiente de acuerdo con el cifrado que estamos usando; de lo contrario, agregaremos un espacio y lo repetiremos hasta llegar al final de la string. Por ejemplo, ‘A’ se reemplaza con ‘aaaa’ 

Descifrado

Extraeremos cada conjunto de 5 caracteres de la string cifrada y comprobaremos si el primer carácter de ese conjunto de 5 caracteres es un espacio. De lo contrario, buscaremos su letra de texto sin formato correspondiente del cifrado, la reemplazaremos e incrementaremos el índice del carácter en 5 (para obtener el conjunto de los siguientes 5 caracteres); de lo contrario, si es un espacio, agregamos un espacio y repetimos un proceso incrementando el actual índice de carácter por 1

Acercarse

En Python, podemos mapear pares clave-valor usando una estructura de datos llamada diccionario. Vamos a usar solo un diccionario en el que mapearemos los pares de texto sin formato-texto cifrado como pares clave-valor. Para el cifrado, simplemente buscaremos el texto cifrado correspondiente accediendo al valor utilizando el carácter de texto sin formato correspondiente como clave. En el descifrado, extraeremos cada 5 conjuntos de caracteres de texto cifrado y recuperaremos sus claves del diccionario usándolas como el valor correspondiente. Para un descifrado preciso, utilizaremos el cifrado de 26 letras. Si no está codificando en python, puede idear su propio enfoque. 

Implementación:

Python

# Python program to implement Baconian cipher
 
'''This script uses a dictionary instead of 'chr()' & 'ord()' function'''
 
'''
Dictionary to map plaintext with ciphertext
(key:value) => (plaintext:ciphertext)
This script uses the 26 letter baconian cipher
in which I, J & U, V have distinct patterns
'''
lookup = {'A': 'aaaaa', 'B': 'aaaab', 'C': 'aaaba', 'D': 'aaabb', 'E': 'aabaa',
          'F': 'aabab', 'G': 'aabba', 'H': 'aabbb', 'I': 'abaaa', 'J': 'abaab',
          'K': 'ababa', 'L': 'ababb', 'M': 'abbaa', 'N': 'abbab', 'O': 'abbba',
          'P': 'abbbb', 'Q': 'baaaa', 'R': 'baaab', 'S': 'baaba', 'T': 'baabb',
          'U': 'babaa', 'V': 'babab', 'W': 'babba', 'X': 'babbb', 'Y': 'bbaaa', 'Z': 'bbaab'}
 
# Function to encrypt the string according to the cipher provided
 
 
def encrypt(message):
    cipher = ''
    for letter in message:
        # checks for space
        if(letter != ' '):
            # adds the ciphertext corresponding to the
            # plaintext from the dictionary
            cipher += lookup[letter]
        else:
            # adds space
            cipher += ' '
 
    return cipher
 
# Function to decrypt the string
# according to the cipher provided
 
 
def decrypt(message):
    decipher = ''
    i = 0
 
    # emulating a do-while loop
    while True:
        # condition to run decryption till
        # the last set of ciphertext
        if(i < len(message)-4):
            # extracting a set of ciphertext
            # from the message
            substr = message[i:i + 5]
            # checking for space as the first
            # character of the substring
            if(substr[0] != ' '):
                '''
                This statement gets us the key(plaintext) using the values(ciphertext)
                Just the reverse of what we were doing in encrypt function
                '''
                decipher += list(lookup.keys()
                                 )[list(lookup.values()).index(substr)]
                i += 5  # to get the next set of ciphertext
 
            else:
                # adds space
                decipher += ' '
                i += 1  # index next to the space
        else:
            break  # emulating a do-while loop
 
    return decipher
 
 
def main():
    message = "Geeks for Geeks"
    result = encrypt(message.upper())
    print(result)
 
    message = "AABAAABBABABAABABBBABBAAA"
    result = decrypt(message.lower())
    print(result)
 
 
# Executes the main function
if __name__ == '__main__':
    main()
Producción

aabbaaabaaaabaaabababaaba aabababbbabaaab aabbaaabaaaabaaabababaaba
ENJOY

Análisis: Este cifrado ofrece muy poca seguridad en la comunicación, ya que es un cifrado de sustitución. Como tal, todos los métodos utilizados para criptoanalizar los cifrados de sustitución se pueden usar para romper los cifrados baconianos. La principal ventaja del cifrado es que permite ocultar el hecho de que se ha enviado un mensaje secreto. 

Este artículo es una contribución de Palash Nigam . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *