Hacking mật mã đơn pha

Trong chương này, bạn sẽ tìm hiểu về mật mã đơn pha và cách hack nó bằng Python.

Mật mã đơn pha

Mật mã Monoalphabetic sử dụng sự thay thế cố định để mã hóa toàn bộ thông điệp. Mật mã một pha sử dụng từ điển Python với các đối tượng JSON được hiển thị ở đây -

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',
	' ': ' ',
}

Với sự trợ giúp của từ điển này, chúng ta có thể mã hóa các ký tự với các ký tự được liên kết dưới dạng giá trị trong đối tượng JSON. Chương trình sau tạo ra một chương trình đơn pha như một biểu diễn lớp bao gồm tất cả các chức năng mã hóa và giải mã.

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

Tệp này được gọi sau đó để thực hiện quá trình mã hóa và giải mã của mật mã Monoalphabetic được đề cập như dưới đây:

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)

Đầu ra

Bạn có thể quan sát đầu ra sau đây khi bạn triển khai mã được đưa ra ở trên:

Do đó, bạn có thể hack một mật mã một pha với cặp giá trị khóa được chỉ định để bẻ khóa văn bản mật mã thành văn bản thuần túy thực tế.