Hackear cifrado monoalfabético

En este capítulo, aprenderá sobre el cifrado monoalfabético y su pirateo con Python.

Cifrado monoalfabético

Un cifrado monoalfabético utiliza una sustitución fija para cifrar todo el mensaje. Aquí se muestra un cifrado monoalfabético que utiliza un diccionario Python con objetos JSON:

monoalpha_cipher = {
   'a': 'm',
   'b': 'n',
   'c': 'b',
   'd': 'v',
   'e': 'c',
   'f': 'x',
   'g': 'z',
   'h': 'a',
   'i': 's',
   'j': 'd',
   'k': 'f',
   'l': 'g',
   'm': 'h',
   'n': 'j',
   'o': 'k',
   'p': 'l',
   'q': 'p',
   'r': 'o',
   's': 'i',
   't': 'u',
   'u': 'y',
   'v': 't',
   'w': 'r',
   'x': 'e',
   'y': 'w',
   'z': 'q',
	' ': ' ',
}

Con la ayuda de este diccionario, podemos cifrar las letras con las letras asociadas como valores en el objeto JSON. El siguiente programa crea un programa monoalfabético como una representación de clase que incluye todas las funciones de cifrado y descifrado.

from string import letters, digits
from random import shuffle

def random_monoalpha_cipher(pool = None):
   if pool is None:
      pool = letters + digits
   original_pool = list(pool)
   shuffled_pool = list(pool)
   shuffle(shuffled_pool)
   return dict(zip(original_pool, shuffled_pool))

def inverse_monoalpha_cipher(monoalpha_cipher):
   inverse_monoalpha = {}
   for key, value in monoalpha_cipher.iteritems():
      inverse_monoalpha[value] = key
   return inverse_monoalpha

def encrypt_with_monoalpha(message, monoalpha_cipher):
   encrypted_message = []
   for letter in message:
      encrypted_message.append(monoalpha_cipher.get(letter, letter))
   return ''.join(encrypted_message)

def decrypt_with_monoalpha(encrypted_message, monoalpha_cipher):
   return encrypt_with_monoalpha(
      encrypted_message,
      inverse_monoalpha_cipher(monoalpha_cipher)
   )

Este archivo se llama más tarde para implementar el proceso de cifrado y descifrado del cifrado monoalfabético que se menciona a continuación:

import monoalphabeticCipher as mc

cipher = mc.random_monoalpha_cipher()
print(cipher)
encrypted = mc.encrypt_with_monoalpha('Hello all you hackers out there!', cipher)
decrypted = mc.decrypt_with_monoalpha('sXGGt SGG Nt0 HSrLXFC t0U UHXFX!', cipher)

print(encrypted)
print(decrypted)

Salida

Puede observar el siguiente resultado cuando implementa el código dado anteriormente:

Por lo tanto, puede piratear un cifrado monoalfabético con un par de clave-valor especificado que convierte el texto cifrado en texto sin formato.