Изучение множественных шифров алфавитных строк: подробное руководство

Криптография уже давно стала важным аспектом безопасной связи. Со временем были разработаны различные методы шифрования и шифры для обеспечения конфиденциальности информации. В этой статье мы углубимся в увлекательный мир множественных шифров буквенных строк, изучим различные методы и предоставим примеры кода, которые помогут вам понять их реализацию.

  1. Шифр Виженера:
    Шифр Виженера — один из самых известных многобуквенных строковых шифров. Он использует серию переплетенных шифров Цезаря, основанных на ключевом слове. Каждая буква ключевого слова соответствует значению сдвига для соответствующей буквы открытого текста. Вот пример реализации шифра Виженера в Python:
def vigenere_encrypt(plain_text, key):
    key = key.upper()
    encrypted_text = ""
    for i in range(len(plain_text)):
        char = plain_text[i]
        if char.isalpha():
            key_shift = ord(key[i % len(key)]) - 65
            if char.isupper():
                encrypted_text += chr((ord(char) + key_shift - 65) % 26 + 65)
            else:
                encrypted_text += chr((ord(char) + key_shift - 97) % 26 + 97)
        else:
            encrypted_text += char
    return encrypted_text
def vigenere_decrypt(encrypted_text, key):
    key = key.upper()
    plain_text = ""
    for i in range(len(encrypted_text)):
        char = encrypted_text[i]
        if char.isalpha():
            key_shift = ord(key[i % len(key)]) - 65
            if char.isupper():
                plain_text += chr((ord(char) - key_shift - 65) % 26 + 65)
            else:
                plain_text += chr((ord(char) - key_shift - 97) % 26 + 97)
        else:
            plain_text += char
    return plain_text
# Usage
plaintext = "HELLO WORLD"
key = "KEY"
encrypted_text = vigenere_encrypt(plaintext, key)
decrypted_text = vigenere_decrypt(encrypted_text, key)
print("Encrypted Text:", encrypted_text)
print("Decrypted Text:", decrypted_text)
  1. Шифр Бофорта:
    Шифр Бофорта похож на шифр Виженера, но использует направление, противоположное шифру Цезаря. Ключ повторяется, чтобы соответствовать длине открытого текста, и каждая буква ключа соответствует значению сдвига для соответствующей буквы открытого текста. Вот пример реализации шифра Бофорта в Python:
def beaufort_encrypt(plain_text, key):
    key = key.upper()
    encrypted_text = ""
    for i in range(len(plain_text)):
        char = plain_text[i]
        if char.isalpha():
            key_shift = ord(key[i % len(key)]) - 65
            if char.isupper():
                encrypted_text += chr((ord(char) - key_shift - 65) % 26 + 65)
            else:
                encrypted_text += chr((ord(char) - key_shift - 97) % 26 + 97)
        else:
            encrypted_text += char
    return encrypted_text
def beaufort_decrypt(encrypted_text, key):
    key = key.upper()
    plain_text = ""
    for i in range(len(encrypted_text)):
        char = encrypted_text[i]
        if char.isalpha():
            key_shift = ord(key[i % len(key)]) - 65
            if char.isupper():
                plain_text += chr((ord(char) + key_shift - 65) % 26 + 65)
            else:
                plain_text += chr((ord(char) + key_shift - 97) % 26 + 97)
        else:
            plain_text += char
    return plain_text
# Usage
plaintext = "HELLO WORLD"
key = "KEY"
encrypted_text = beaufort_encrypt(plaintext, key)
decrypted_text = beaufort_decrypt(encrypted_text, key)
print("Encrypted Text:", encrypted_text)
print("Decrypted Text:", decrypted_text)
  1. Шифрование с автоключом.
    Шифрование с автоключом — это еще один вариант шифра Виженера. Вместо повторения ключа для расширения ключа используется сам открытый текст. Это обеспечивает большую безопасность, поскольку ключ больше не повторяется. Вот пример реализации шифрования с автоключом в Python:
def autokey_encrypt(plain_text, key):
    key = key.upper()
    encrypted_text = ""
    key_stream = key + plain_text
    for i in range(len(plain_text)):
        char = plain_text[i]
        if char.isalpha():
            key_shift = ord(key_stream[i]) - 65
            if char.isupper():
                encrypted_text += chr((ord(char) + key_shift - 65) % 26 + 65)
            else:
                encrypted_text += chr((ord(char) + key_shift - 97) % 26 + 97)
        else:
            encrypted_text += char
    return encrypted_text
def autokey_decrypt(encrypted_text, key):
    key = key.upper()
    plain_text = ""
    key_stream = key + encrypted_text
    for i in range(len(encrypted_text)):
        char = encrypted_text[i]
        if char.isalpha():
            key_shift = ord(key_stream[i]) - 65
            if char.isupper():
                plain_text += chr((ord(char) - key_shift - 65) % 26 + 65)
            else:
                plain_text += chr((ord(char) - key_shift - 97) % 26 + 97)
        else:
            plain_text += char
    return plain_text
# Usage
plaintext = "HELLO WORLD"
key = "KEY"
encrypted_text = autokey_encrypt(plaintext, key)
decrypted_text = autokey_decrypt(encrypted_text, key)
print("Encrypted Text:", encrypted_text)
print("Decrypted Text:", decrypted_text)

Множественные буквенные строковые шифры, такие как шифр Виженера, шифр Бофорта и шифр Autokey, обеспечивают дополнительный уровень сложности и безопасности зашифрованной информации. Используя примеры кода, мы изучили реализацию этих шифров в Python. Не забывайте использовать эти шифры ответственно и всегда храните ключ в безопасности.