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

Дешифрование методом Виженера. Не могу обнаружить ошибку

02.12.2015, 16:50. Показов 4194. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Сделала шифрование текста, получилось, а вот как дешифрую, получается еще один шифрованый текст, а не исходный. Подскажите, пожалуйста, в чем моя ошибка ?

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
import string
 
text_plain = """Alan Mathison Turing was a British mathematician."""
text_plain = text_plain.upper()
key=input("Enter the key_word -> ")
key=key.upper()
key=list(key)
print(text_plain)
print(key)
 
 
rep=len(text_plain)//len(key)
residue=len(text_plain)%len(key)
print("len_text_plain=",len(text_plain)," len_key=",len(key)," rep=",rep," residue=",residue)
key=key*rep+key[:residue]
print("\nlen_key=",len(key))
 
text_cipher=""
 
for i,letter in enumerate(text_plain):
    if letter in string.ascii_uppercase:
        code_cipher=ord(letter)+(ord(key[i])-65)
        if code_cipher>90:
            code_cipher-=26        
    else:
        code_cipher=ord(letter)
    letter_cipher=chr(code_cipher)
    #print(i," - code_cipher=",code_cipher," letter_cipher - ",letter_cipher)
    text_cipher+=letter_cipher
 
print("\ntext_cipher=",text_cipher)
 
text_decipher=""
 
for i,letter in enumerate(text_plain):
    if letter in string.ascii_uppercase:
        code_cipher=ord(letter)-(ord(key[i])-65)
        if code_cipher<65:
            code_cipher+=26        
    else:
        code_cipher=ord(letter)
    letter_cipher=chr(code_cipher)
    #print(i," - code_cipher=",code_cipher," letter_cipher - ",letter_cipher)
    text_decipher+=letter_cipher
 
print("\ntext_decipher=",text_decipher)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2015, 16:50
Ответы с готовыми решениями:

Шифрование и дешифрование методом Виженера
Надо сделать класс шифрования и дешифрования текстового документа!Вот что пока получось пока. #include &lt;iostream&gt; #include...

Не могу обнаружить ошибку в учебной программе из книги (шаблоны классов)
Вот упрощённый код учебной программы из книжки Детейла. Не компилится, пишет: /123/main.cpp|21|error: request for member ‘print’ in ‘l’,...

Шифрование и дешифрование. Не могу понять ошибку
Шифрование с помощью S-блоков осуществляется следующим образом. Сообщение разбивается на блоки из 6 бит. Два из этих битов используются...

1
8 / 8 / 5
Регистрация: 10.11.2015
Сообщений: 44
Записей в блоге: 3
03.12.2015, 20:10
Криптография - моё всё
Посмотрите Wikipedia - "Шифр Виженера", в конец статьи.
Там помещен НЕПРАВИЛЬНЫЙ pythonовский код для зашифровки по шифру Виженера. Пара исправлений - и дело в шляпе:

Зашифровка:
Python
1
2
3
4
5
6
7
8
9
10
print('Впишите текст на зашифровку, пожалуйста')
#Get plaintext and key by user
plain = input().upper()
print('Впишите ключ для зашифровки, пожалуйста')
key = input().upper()
#Здесь ключ умножается на необходимое число так, что len(key) >= len(plain). Без обрезки на конце, если лишку.
key *= len(plain) // len(key) + 1 if not len(plain) == len(key) else 1
#Сама зашифровка происходит здесь.
ciphered = ''.join([chr((ord(chplain) + ord(key[indx])) % 26 + ord('A')) for indx, chplain in enumerate(plain)])
print(ciphered)
Расшифровка:
Python
1
2
3
print('Getting plain text from ciphered by key')
plain = ''.join([chr((ord(chplain) - ord(key[indx])) % 26 + ord('A')) for indx, chplain in enumerate(ciphered)])
print(plain)
Корявый исходник с Вики даже не запускайте
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2015, 20:10
Помогаю со студенческими работами здесь

Шифрование и дешифрование. Не могу найти ошибку
Доброго времени суток! Шифровала методом Гронсфельда, но при выводе на экран расшифрованного текста почему-то выводится не только...

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

Дешифрование шифра Виженера
Тут мне дали небольшую задачку, хотя она не такая простая как я думал. Написать дешифровщиик по шифру Виженера не беда, а можно ли написать...

Шифр Виженера, добавить дешифрование
Шифр Виженера, С++, дешифрование Есть программа, которая зашифровывает, нужно доделать ее так, чтобы она еще и расшифровывала ...

Шифрования и дешифрование алгоритм Виженера на кириллице
Господа, не могли бы вы подсказать готовую прогу, а то я уже все :coffee2: Заранее благодарен


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru