Meretas Sandi Monoalphabetic
Dalam bab ini, Anda akan belajar tentang sandi monoalphabetic dan peretasannya menggunakan Python.
Sandi Monoalphabetic
Sebuah sandi monoalphabetic menggunakan substitusi tetap untuk mengenkripsi seluruh pesan. Sebuah sandi monoalphabetic menggunakan kamus Python dengan objek JSON ditampilkan di sini -
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',
' ': ' ',
}
Dengan bantuan kamus ini, kita dapat mengenkripsi huruf dengan huruf terkait sebagai nilai dalam objek JSON. Program berikut membuat program monoalphabetic sebagai representasi kelas yang mencakup semua fungsi enkripsi dan dekripsi.
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)
)
File ini dipanggil kemudian untuk mengimplementasikan proses enkripsi dan dekripsi dari sandi Monoalphabetic yang disebutkan di bawah ini -
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)
Keluaran
Anda dapat mengamati keluaran berikut ketika Anda menerapkan kode yang diberikan di atas -
Dengan demikian, Anda dapat meretas sandi monoalphabetic dengan pasangan nilai kunci tertentu yang memecahkan teks sandi menjadi teks biasa yang sebenarnya.