/
DannyFLS
/
HASH
Обзор
Документация
Войти
/
DannyFLS
/
HASH
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
4.py
78 строк
4 KB
DannyGolds
Old works
15 май 2026, 07:12
15 май 2026, 07:12
0c2c90c
Код
Авторство
О чём код?
import dearpygui.dearpygui as dpg import os # --- Логика шифрования (Задание 12) --- def xor_block(block, key): """Простая XOR-функция в качестве блочного шифра """ return bytes([b ^ key for b in block]) def run_research(sender, app_data): key = 0xAB iv = b'\x00\x00\x00\x00' # Берем 2 блока текста по 4 байта p1, p2 = b'SAFE', b'TEST' # --- РЕЖИМ CFB --- # Шифрование: C1 = P1 ^ E(IV), C2 = P2 ^ E(C1) [cite: 10] c1 = bytes([p1[i] ^ xor_block(iv, key)[i] for i in range(4)]) c2 = bytes([p2[i] ^ xor_block(c1, key)[i] for i in range(4)]) # Вносим ошибку в 1-й бит C1 c1_err = bytes([c1[0] ^ 0b00000001]) + c1[1:] # Расшифровка CFB с ошибкой: P1* = C1_err ^ E(IV), P2* = C2 ^ E(C1_err) [cite: 10] p1_cfb_dec = bytes([c1_err[i] ^ xor_block(iv, key)[i] for i in range(4)]) p2_cfb_dec = bytes([p2[i] ^ c2[i] ^ xor_block(c1_err, key)[i] for i in range(4)]) # упрощенно для теста # На самом деле формула P = C ^ E(prev_C) p1_cfb_res = bytes([c1_err[i] ^ xor_block(iv, key)[i] for i in range(4)]) p2_cfb_res = bytes([c2[i] ^ xor_block(c1_err, key)[i] for i in range(4)]) # --- РЕЖИМ CBC --- # Расшифровка: P1 = D(C1) ^ IV, P2 = D(C2) ^ C1 [cite: 9, 22] p1_cbc_res = bytes([xor_block(c1_err, key)[i] ^ iv[i] for i in range(4)]) p2_cbc_res = bytes([xor_block(c2, key)[i] ^ c1_err[i] for i in range(4)]) # Вывод результатов в GUI dpg.set_value("cfb_res", f"P1: {p1_cfb_res.decode(errors='replace')} | P2: {p2_cfb_res.decode(errors='replace')}") dpg.set_value("cbc_res", f"P1: {p1_cbc_res.decode(errors='replace')} | P2: {p2_cbc_res.decode(errors='replace')}") dpg.set_value("analysis", "АНАЛИЗ:\n" "1. В CFB ошибка в C1 изменила только 1 бит в P1, но полностью разрушила P2 (эффект лавины в E(K)). \n" "2. В CBC ошибка в C1 полностью разрушила P1 (эффект лавины в D(K)), но в P2 изменился только 1 бит. [cite: 13, 23, 35]") # --- Интерфейс --- dpg.create_context() # Попытка загрузки шрифта для кириллицы with dpg.font_registry(): f_path = "C:\\Windows\\Fonts\\arial.ttf" if os.path.exists(f_path): with dpg.font(f_path, 18) as f: dpg.add_font_range_hint(dpg.mvFontRangeHint_Cyrillic) dpg.bind_font(f) with dpg.window(label="Задание №12: Исследование ошибок CFB vs CBC", width=600, height=450): dpg.add_text("Исходный текст: 'SAFETEST' (2 блока по 4 байта)") dpg.add_text("Симуляция: изменение 1 бита в первом блоке шифртекста (C1)") dpg.add_button(label="Запустить исследование", callback=run_research) dpg.add_spacer(height=10) dpg.add_separator() dpg.add_text("Результат расшифровки CFB (ошибка в C1):") dpg.add_input_text(tag="cfb_res", readonly=True, width=-1) dpg.add_text("Результат расшифровки CBC (ошибка в C1):") dpg.add_input_text(tag="cbc_res", readonly=True, width=-1) dpg.add_spacer(height=10) dpg.add_text("Выводы исследования:", color=[255, 255, 100]) dpg.add_input_text(tag="analysis", multiline=True, readonly=True, width=-1, height=120) dpg.create_viewport(title="Crypto Lab #4 - Task 12", width=620, height=480) dpg.setup_dearpygui() dpg.show_viewport() dpg.start_dearpygui() dpg.destroy_context()