Piratage du chiffrement monoalphabétique
Dans ce chapitre, vous découvrirez le chiffrement monoalphabétique et son piratage à l'aide de Python.
Chiffre monoalphabétique
Un chiffrement monoalphabétique utilise une substitution fixe pour chiffrer l'intégralité du message. Un chiffrement monoalphabétique utilisant un dictionnaire Python avec des objets JSON est montré ici -
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',
' ': ' ',
}
Avec l'aide de ce dictionnaire, nous pouvons crypter les lettres avec les lettres associées en tant que valeurs dans l'objet JSON. Le programme suivant crée un programme monoalphabétique en tant que représentation de classe qui inclut toutes les fonctions de cryptage et de décryptage.
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)
)
Ce fichier est appelé plus tard pour implémenter le processus de cryptage et de décryptage du chiffrement Monoalphabetic qui est mentionné ci-dessous -
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)
Production
Vous pouvez observer la sortie suivante lorsque vous implémentez le code donné ci-dessus -
Ainsi, vous pouvez pirater un chiffrement monoalphabétique avec une paire clé / valeur spécifiée qui transforme le texte chiffré en texte brut réel.