Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 07.07.2020
Сообщений: 25

Шифр цезаря и криптоаналитическая атака

24.11.2021, 22:42. Показов 752. Ответов 1

Студворк — интернет-сервис помощи студентам
есть код который правильно шифрует слово по цезарю с ключевым словом но и надо сделать для дешифровку ,сделал с помощью криптоаналитической атаки,вроде всё реализовал правильно и взял у друга пример,у него все работает а у меня проблема с размерностью не могу понять почему

IndexError: list index out of range в 63 строке ошибка


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from random import *
import string
 
Alphalist = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
file = open('текст для теса.txt', 'r')
startMessage = file.read().upper()
startMessage = startMessage.translate(str.maketrans(' ', ' ', string.punctuation))  # избавились от знаков препинания
print("Текст для зашифровки:", startMessage)
numberkey = int(input('Отступ: '))
key=[Alphalist[randint(0,len(Alphalist))-1]for i in range(1,len(Alphalist))]
key=set(key)
key=''.join(list(key))
print('Ключевое слово:',key)
 
 
def remove(alpha, string):
    for symbol in string:
        if symbol not in [chr(x) for x in range(65, 91)] \
        or string.count(symbol) > 1: string.remove(symbol)
        if symbol in alpha: alpha.remove(symbol)
    return alpha, string
 
 
def insert(alpha_string):
    for index, symbol in enumerate(alpha_string[1]):
        alpha_string[0].insert((numberkey + index) % 26, symbol)
    return alpha_string[0]
 
 
def encryptDecrypt( message, keyy,final=""):
    alpha = insert(remove(Alphalist, key))
    print(alpha)
    for symbol in message:
            final += alpha[(alpha.index(symbol) + keyy) % 26]
    return final
def encryptDecrypt1( message, keyy,final1=""):
    alpha = insert(remove(Alphalist, key))
    print(alpha)
    for symbol in message:
            final1 += alpha[(alpha.index(symbol) - keyy) % 26]
    return final1
 
 
message = encryptDecrypt( startMessage, numberkey)
 
print("Final", message)
EngAlphabet = [[' ', 0.185], ['e', 0.097], ['t', 0.076], ['a', 0.064], ['o', 0.062], ['n', 0.057], ['i', 0.056],
               ['s', 0.052], ['r', 0.047], ['h', 0.04], ['l', 0.031], ['d', 0.028], ['c', 0.025], ['u', 0.018],
               ['p', 0.018], ['f', 0.018], ['m', 0.017], ['w', 0.016], ['y', 0.015], ['b', 0.013], ['g', 0.013],
               ['v', 0.007], ['k', 0.0039], ['q', 0.002], ['x', 0.002], ['j', 0.001], ['z', 0.001]]
 
CryptAlphabet = []
for i in set(''.join(list(message))):
    CryptAlphabet.append([i, message.count(i) / len(message)])
 
for i in range(len(CryptAlphabet) - 1):
    for j in range(len(CryptAlphabet) - i - 1):
        if CryptAlphabet[j][1] < CryptAlphabet[j + 1][1]:
            CryptAlphabet[j], CryptAlphabet[j + 1] = CryptAlphabet[j + 1], CryptAlphabet[j]
 
LetterSwap = []
for i in range(len(EngAlphabet)):
    LetterSwap.append([EngAlphabet[i][0], CryptAlphabet[i][0]])
 
Run = True
while Run:
    EncryptWord = ""
    for letter in message:
        for i in LetterSwap:
            if letter == i[1]:
                EncryptWord += i[0]
                break
 
    print('расшифрованный текст:', EncryptWord)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.11.2021, 22:42
Ответы с готовыми решениями:

Криптографическая атака на шифр простой замены
Используя частотный анализ текста, расшифруйте следующее сообщение: «КЭСОН ЫФА ШЧЭСНТДК СИЪТГ ТМШТЯА ИЯОНГ НЪФЯ, СОСЮЪТТС ЫФА...

Шифр Цезаря
Напишите функцию encrypt_caesar(msg, shift), которая кодирует сообщение шифром Цезаря и возвращает его. Шифр Цезаря заменяет каждую букву в...

Шифр Цезаря
alphavit = &quot;абвгдеёжзийклмнопрстуфхцчшщъыьэюяабвгдеёжзийклмнопрстуфхцчшщъыьэюя&quot; # Второй алфавит нужен для того чтобы шифравать...

1
290 / 170 / 92
Регистрация: 21.03.2016
Сообщений: 400
24.11.2021, 22:54
Посмотри длинну списка EngAlphabet и CryptAlphabet. и что в них находится до строчки с ошибкой.
Я не уверен, но скорее всего длинна CryptAlphabet меньше EngAlphabet , вот и ошибка о том что такого индекса не существует.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2021, 22:54
Помогаю со студенческими работами здесь

Шифр цезаря
str=&quot;абвгдеежзийклмнопрстуфхцчшщъюьэюя&quot; print(&quot;enter key&quot;) key=int(input()) print(&quot;enter word&quot;) word=input() for j in...

Шифр Цезаря
d = int(input()) a = str(input()) for i in a: if i == chr(32): print(i, end=&quot;&quot;) elif i == chr(33): ...

Шифр Цезаря
Приветствую. Код: q = &quot;abcde abc&quot; for i in q: w = chr(ord(i) + 1) print(w) как сделать чтобы чтобы python выводил...

Шифр Цезаря
Есть задача Напишите функцию encrypt_caesar(msg, shift), которая кодирует сообщение шифром Цезаря и возвращает его. Шифр Цезаря заменяет...

Шифр Цезаря
Напольная программа, которая получает входную строку, не превышает 256 символов, содержит только строчные символы латинского алфавита и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru