Загрузка данных


Задача 1. Caesar Cipher Brute Force
Условие: Перехвачен шифротекст "Wkh vhfuhw phvvdjh lv klgghq". Известно, что использован шифр Цезаря. Напишите скрипт, который автоматически перебирает все 26 сдвигов и находит осмысленный текст.
Решение:
python
def caesar_bruteforce(ciphertext):
    for shift in range(26):
        decrypted = ""
        for char in ciphertext:
            if char.isalpha():
                base = ord('A') if char.isupper() else ord('a')
                decrypted += chr((ord(char) - base - shift) % 26 + base)
            else:
                decrypted += char
        print(f"Shift {shift:2d}: {decrypted}")

caesar_bruteforce("Wkh vhfuhw phvvdjh lv klgghq")
Ответ: Сдвиг 3 → "The secret message is hidden"

Задача 2. ROT13 и разведка через частотный анализ
Условие: Дан текст "Gur cnffjbeq vf FhcreFrperg123". Определите тип шифра, расшифруйте его и напишите функцию, которая автоматически определяет ROT13 (без перебора).
Решение:
python
import codecs

cipher = "Gur cnffjbeq vf FhcreFrperg123"

# ROT13 — сам себе обратный
decrypted = codecs.decode(cipher, 'rot_13')
print(f"Расшифровано: {decrypted}")

# Автоопределение: ROT13 даёт осмысленный текст с частыми 'e','t','a'
def is_english(text):
    common = "etaoin shrdlu"
    return sum(1 for c in text.lower() if c in common) / len(text) > 0.5

if not is_english(cipher):
    print("Похоже на ROT13:", codecs.decode(cipher, 'rot_13'))
Ответ: "The password is SuperSecret123"

Задача 3. XOR-шифр с известным ключом (single-byte)
Условие: Шифротекст получен XOR-ом каждого символа с одним байтом ключа:
[0x2b, 0x3f, 0x3c, 0x3d, 0x20, 0x2e, 0x3f, 0x3c, 0x20, 0x3a, 0x3f, 0x3b]
Найдите ключ и расшифруйте сообщение. Подсказка: в открытом тексте есть слово "secret".
Решение:
python
cipher = [0x2b, 0x3f, 0x3c, 0x3d, 0x20, 0x2e, 0x3f, 0x3c, 0x20, 0x3a, 0x3f, 0x3b]
target = "secret"

# XOR первого байта с 's' даёт кандидат в ключ
for key in range(256):
    decrypted = ''.join(chr(b ^ key) for b in cipher)
    if decrypted.startswith("secret"):
        print(f"Ключ: {key} (0x{key:02x})")
        print(f"Текст: {decrypted}")
        break
Ответ: Ключ 0x5A, текст "secret hacker"

Задача 4. Vigenère Cipher — ручная реализация
Условие: Реализуйте шифр Виженера (шифрование и дешифрование) для ключа "HACK". Зашифруйте строку "PYTHONRULES" и проверьте обратимость.
Решение:
python
def vigenere(text, key, mode='encrypt'):
    result = ""
    key = key.upper()
    ki = 0
    for char in text.upper():
        if char.isalpha():
            shift = ord(key[ki % len(key)]) - ord('A')
            if mode == 'decrypt':
                shift = -shift
            result += chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
            ki += 1
        else:
            result += char
    return result

plain = "PYTHONRULES"
key = "HACK"

enc = vigenere(plain, key, 'encrypt')
dec = vigenere(enc, key, 'decrypt')

print(f"Открытый:  {plain}")
print(f"Шифротекст: {enc}")
print(f"Обратно:   {dec}")
assert dec == plain
Ответ: "PYTHONRULES" → "WYYHOVEYYVK" (и обратно)

Задача 5. Base64 + ROT13 (двойное кодирование)
Условие: Перехвачена строка:
"U0dWc2JHOTBhR1Z5SUhObFkzSmxkQT09"
Известно, что злоумышленник применил сначала ROT13, потом Base64. Восстановите исходное сообщение.
Решение:
python
import base64
import codecs

data = "U0dWc2JHOTBhR1Z5SUhObFkzSmxkQT09"

# Шаг 1: Base64 decode
step1 = base64.b64decode(data).decode()
print(f"После Base64: {step1}")

# Шаг 2: ROT13 decode
step2 = codecs.decode(step1, 'rot_13')
print(f"Итог: {step2}")
Ответ: "secret hacker"