Hacking Monoalphabetic Cipher

In questo capitolo imparerai a conoscere la cifratura monoalfabetica e il suo hacking usando Python.

Cipher monoalfabetico

Una crittografia monoalfabetica utilizza una sostituzione fissa per crittografare l'intero messaggio. Qui viene mostrato un codice monoalfabetico che utilizza un dizionario Python con oggetti 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 l'aiuto di questo dizionario, possiamo crittografare le lettere con le lettere associate come valori nell'oggetto JSON. Il seguente programma crea un programma monoalfabetico come rappresentazione di classe che include tutte le funzioni di crittografia e decrittografia.

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)
   )

Questo file viene chiamato in seguito per implementare il processo di crittografia e decrittografia del cifrario monoalfabetico menzionato come di seguito:

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)

Produzione

È possibile osservare il seguente output quando si implementa il codice sopra indicato:

Pertanto, è possibile hackerare un codice monoalfabetico con una coppia chiave-valore specificata che trasforma il testo cifrato in testo normale.