Таблица для шифра виженера excel

Защита ячеек шифром Виженера

Парольная защита листов в Microsoft Excel давно стала притчей во языцех. В том плане, что ее, по-сути, нет. С регулярностью примерно раз в месяц я получаю вопросы по почте на тему «как мне защитить мои данные на листе Excel от просмотра/изменения?» и каждый раз не знаю что ответить. Можно, конечно, дать ссылочку на статью с подробным описанием всех способов защиты ячеек и листов в Excel, но такая защита остановит только начинающего. В сети можно найти кучу платных и бесплатных программ для взлома такой защиты тупым перебором за считанные минуты.

В какой-то момент мне это надоело и я стал искать способы более надежной защиты данных в Excel собственными силами. Самым простым и удобным оказался шифр Виженера.

Принцип шифра Виженера

Одним из самых древних и простых в реализации является шифр Цезаря, который использовал его для тайной переписки. Суть его в том, что каждая буква исходного шифруемого сообщения сдвигается в алфавите на заданное количество символов. Так, например, если сдвиг равен 3, то буква А превратится в Г, буква Б — в Д и так далее:

Шифр Цезаря

Символы в конце алфавита (Э, Ю, Я), соответственно, будут превращаться его начало (А, Б, В).

Реализовать такой шифр просто, но стойкость его невелика — найти нужное число сдвига и дешифровать сообщение можно даже прямым перебором за 20-30 итераций, что займет даже у человека не больше часа, а у современного компьютера доли секунды. Поэтому еще в 15 веке был впервые придуман, а потом в 16 веке французским дипломатом Блезом Виженером официально представлен более совершенный метод на основе шифра Цезаря, получивший впоследствии название «шифр Виженера». Его принцип в том, что каждая буква в исходном шифруемом тексте сдвигается по алфавиту не на фиксированное, а переменное количество символов. Величина сдвига каждой буквы задается ключом (паролем) — секретным словом или фразой, которая используется для шифрования и расшифровки. 

Допустим, мы хотим зашифровать фразу «КЛАД ЗАРЫТ В САДУ» используя слово ЗИМА в качестве ключа. Запишем это слово подряд несколько раз под исходной фразой:

vigenere-encription2.png

Для удобства шифрования используем так называемый «квадрат Виженера» — таблицу, где в каждой строке алфавит сдвигается на одну позицию вправо:

квадрат виженера

Если взять строку с первой буквой ключа (З) и столбец с первой буквой исходного текста (К), то на их пересечении увидим букву «Т» — это и будет первая буква нашего зашифрованного сообщения. Затем процедура повторяется для всех остальных пар букв ключа и исходного сообщения по очереди и в результате мы получаем зашифрованный вариант нашей исходной фразы:

шифр виженера результат

Заметьте, что одна и та же буква (например А) в исходном сообщений превратилась в разные буквы на выходе (Н, Й и Б), т.к. сдвиг при шифровании для них был разный. Именно поэтому вскрыть шифр Виженера простыми способами невозможно — вплоть до 19 века он считался невзламываемым и успешно использовался военными, дипломатами и шпионами многих стран, частности — конфедератами во время Гражданской войны в США.

Реализация формулами по квадрату Виженера

Если использовать готовый квадрат Виженера как в примере выше, то реализовать шифрование можно одной формулой с помощью функций ИНДЕКС (INDEX) и ПОИСКПОЗ (MATCH), как это было описано в статье про двумерный поиск в таблице. Выглядеть это может примерно так:

vigenere-encription5.png

Логика этой формулы следующая:

  • Первая функция ПОИСКПОЗ (подсвечена зеленым) ищет первую букву ключа (З) в зеленом столбце (B9:B40) и выдает порядковый номер ячейки, где она ее нашла, т.е. номер строки в квадрате Виженера по которому идет шифрование.
  • Вторая функция ПОИСКПОЗ (подсвечена розовым) аналогичным образом ищет первую букву исходного сообщения (К) в красной строке и выдает порядковый номер столбца.
  • Функция ИНДЕКС выдает содержимое ячейки из квадрата (C9:AH40) с пересечения строки и столбца с найденными номерами.

Реализация формулами по кодам символов

Легко сообразить, что в реальной жизни в документах могут использоваться не только буквы русского языка, но и латиница, цифры, знаки препинания и т.д. Делать квадрат Виженера с участием всех этих символов — та еще эпопея, но есть другой, гораздо более простой способ.

Внутри компьютера и операционной системы каждый символ имеет свой числовой код от 0 до 255 (его еще называют ASCII-кодом). Microsoft Excel имеет в своем стандартном наборе две функции, которые умеют с ними работать:

  • Функция КОДСИМВ (CODE) — выдает числовой код символа, указанного в качестве аргумента. Например КОДСИМВ(«Ж») выдаст 198.
  • Функция СИМВОЛ (CHAR) — выдает символ, соответствующий указанному в аргументе коду, т.е. наоборот СИМВОЛ(198) даст нам букву Ж. 

Для применения шифра Виженера запишем наш исходный текст и ключ друг под другом как раньше и выведем коды каждой буквы с помощью функции КОДСИМВ:

vigenere-encription6.png

Теперь сложим коды символов ключа и исходного текста, добавив функцию ОСТАТ (MOD), чтобы при превышении максимально допустимого количества символов (256) остаться в пределах 0-255:

vigenere-encription7.png

Теперь осталось использовать функцию СИМВОЛ, чтобы вывести символы по полученным кодам и сформировать зашифрованное сообщение:

vigenere-encription8.png

Само-собой, можно было бы обойтись и без дополнительных строк, уложив все функции в одну формулу для компактности:

vigenere-encription9.png

Расшифровка производится совершенно аналогично, только знак «плюс» в формуле меняется на «минус»:

vigenere-encription10.png

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

Макросы для шифрования-дешифрования

Ну, а теперь самое интересное. Чтобы применить шифр Виженера в реальной жизни лучше будет воспользоваться простым макросом, который проводит все описанные в предыдущем пункте операции с каждой ячейкой текущего листа автоматически. Откройте редактор Visual Basic с помощью сочетания клавиш Alt+F11 или кнопкой Visual Basic на вкладке Разработчик (Developer). Вставьте новый модуль с помощью команды меню Insert — Module и скопируйте туда текст наших макросов:

 
'Шифрование текущего листа
Sub Encrypt()
    Dim Pass$, Key$
    Pass = InputBox("Введите ключ для шифрования:")
    Key = WorksheetFunction.Rept(Pass, 100)
    
    For Each cell In ActiveSheet.UsedRange
        Out = ""
        Txt = cell.Formula
        For i = 1 To Len(Txt)
            Out = Out & Chr((Asc(Mid(Txt, i, 1)) + Asc(Mid(Key, i, 1))) Mod 256)
        Next i
        cell.Value = Out
    Next cell
End Sub

'Дешифрация текущего листа
Sub Decrypt()
    Dim Pass$, Key$
    Pass = InputBox("Введите ключ для расшифровки:")
    Key = WorksheetFunction.Rept(Pass, 100)
    
    For Each cell In ActiveSheet.UsedRange
        Out = ""
        Txt = cell.Value
        For i = 1 To Len(Txt)
            Out = Out & Chr((Asc(Mid(Txt, i, 1)) - Asc(Mid(Key, i, 1)) + 256) Mod 256)
        Next i
        cell.Formula = Out
    Next cell
End Sub
 

Первый макрос запрашивает у пользователя ключ и шифрует все ячейки текущего листа. Второй макрос производит обратную операцию дешифрования. Запустить получившиеся макросы можно с помощью сочетания клавиш Alt+F8 или кнопки Макросы (Macros) на вкладке Разработчик (Developer). Выглядеть все это может примерно так:

vigenere-encryption11.gif

Важные нюансы

  • ВНИМАНИЕ! Если вы внимательно прочитали статью, то должны четко понимать — не существует легкого способа узнать или подобрать ключ! Есть несколько методик взлома шифра Виженера, но все они весьма сложны для неспециалиста и не дают 100% гарантии. Если вы забудете ключ — потеряете данные навсегда с большой вероятностью. Если что — я вас предупредил.
  • При шифровании не нарушаются формулы, ссылки и форматирование — после дешифрации все отлично работает.
  • Если при дешифрации вы неправильно введете ключ, то получите бессмысленную «кашу» из спецсимволов вместо своего текста (т.к. сдвиг кодов будет неправильным). Тогда придется откатиться на шаг назад повторным шифрованием с тем же паролем и потом снова попробовать расшифровать документ еще раз (на этот раз используя правильный ключ).

Ссылки по теме

  • 4 способа защиты данных в Microsoft Excel
  • Суперскрытый лист в книге Excel
  • Выборочное отображение листов книги пользователям по паролю

Шифр Виженера для защиты данных в Excel

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

Что такое шифры — очень хороший вопрос! В обычном понимании это система преобразований, которая зависит от некоего секретного параметра (ключа) и которая необходима для секретной передачи информации.

Как часто нам нужно скрыть данные в таблицах Excel — ответ очевиден. Скрывать ячейки, менять их форматы, защищать паролем — средства проверенные, но крайне ненадёжные. А что если злоумышленник увидит вместо таблицы непонятный набор символов, некую «абракадабру»? Это остановит (пусть и на какое-то время) даже профессионала своего дела.

Немного о самом шифре и его создателе.

Блез де Виженер был французским дипломатом, в 16 веке (родился 5 апреля 1523 г., умер 19 февраля1596 г.). Написал более 20 книг, посвящённых криптографии, астрономии, религии и математике. Одним из самых известных его произведений является «Трактат о Цифрах и Тайнописи» (1586, Traicté des Chiffres ou Secrètes Manières d’Escrire).

С криптографией Блез де Виженер познакомился во время своих дипломатических поездок в Рим (шифр Виженера является усовершенствованным вариантом шифра Цезаря).

Сам шифр представляет собой «квадрат Виженера», в который включаются буквы и символы алфавита (латинского, русского и др.). На пересечении ключа и шифруемого сообщения и будет находиться показываемый в «абракадабре» символ.

Пример:

Фраза, которую я шифрую:

ATTACKATDOWN

Ключ:

LEMON

Таким образом, я достраиваю длину ключа до полного совпадения количества символов (LEMONLEMONLE).

На пересечении первой буквы ключа и фразы получится отображаемый символ.

Сложность взлома (криптоанализа) будет заключаться только в одном — поиске длины ключа. В наше время шифр считается слабым ввиду появления алгоритмов атаки Фридмана и Касиски.

Для неискушённых пользователей (я в их числе) самое оно!

Текст макроса:

Шифрование текущего листа
Sub Encrypt()
    Dim Pass$, Key$
    Pass = InputBox(«Введите ключ для шифрования:»)
    Key = WorksheetFunction.Rept(Pass, 100)
     
    For Each cell In ActiveSheet.UsedRange
        Out = «»
        Txt = cell.Formula
        For i = 1 To Len(Txt)
            Out = Out & Chr((Asc(Mid(Txt, i, 1)) + Asc(Mid(Key, i, 1))) Mod 256)
        Next i
        cell.Value = Out
    Next cell
End Sub
 
‘Дешифрация текущего листа
Sub Decrypt()
    Dim Pass$, Key$
    Pass = InputBox(«Введите ключ для расшифровки:»)
    Key = WorksheetFunction.Rept(Pass, 100)
     
    For Each cell In ActiveSheet.UsedRange
        Out = «»
        Txt = cell.Value
        For i = 1 To Len(Txt)
            Out = Out & Chr((Asc(Mid(Txt, i, 1)) — Asc(Mid(Key, i, 1)) + 256) Mod 256)
        Next i
        cell.Formula = Out
    Next cell
End Sub

Всем удачи! Если остались вопросы — пишите в форму обратной связи или оставляйте комментарии!

Расшифровка квадрата Виженера

ArkaIIIa

Дата: Пятница, 03.07.2015, 16:37 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 894


Репутация:

115

±

Замечаний:
0% ±


2010

Господа, помогите, пожалуйста. Что-то туплю совсем.

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

Заранее всем спасибо!

К сообщению приложен файл:

1981215.xlsm
(23.0 Kb)

 

Ответить

ikki

Дата: Пятница, 03.07.2015, 16:41 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

Замечаний:
0% ±


Excel 2003, 2010


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

 

Ответить

ArkaIIIa

Дата: Пятница, 03.07.2015, 16:42 |
Сообщение № 3

Группа: Проверенные

Ранг: Ветеран

Сообщений: 894


Репутация:

115

±

Замечаний:
0% ±


2010

ikki
Это пример из его статьи. Мне нужно обратное действие. Не зашифровать текст, а расшифровать, формулой)

 

Ответить

ikki

Дата: Пятница, 03.07.2015, 16:44 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

Замечаний:
0% ±


Excel 2003, 2010

ну так там же есть

Цитата

Расшифровка производится совершенно аналогично, только знак «плюс» в формуле меняется на «минус»:

и формула приведена.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

 

Ответить

vikttur

Дата: Пятница, 03.07.2015, 16:45 |
Сообщение № 5

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2941

Код

=ИНДЕКС($C$8:$AH$8;ПОИСКПОЗ(H5;ИНДЕКС($C$9:$AH$40;ПОИСКПОЗ(H3;$B$9:$B$40;););))

Или без квадрата:

Код

=СИМВОЛ(191+ABS(КОДСИМВ(H5)-КОДСИМВ(H3)))

Вторую плотнее не проверял. Возможно, ABS лишняя.

P.S. Я внимания на ссылку не обратил. Там, оказывается, все решено и без нас :)

Сообщение отредактировал viktturПятница, 03.07.2015, 19:17

 

Ответить

Udik

Дата: Пятница, 03.07.2015, 17:48 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 1588


Репутация:

192

±

Замечаний:
0% ±


Excel 2016 х 64

Нда, попробовал разобраться как осуществляется дешифровка в статье, заинтересовался функцией Остат. Узнал много нового для себя, в частности, что остаток от деления на 256 числа -54 = 202, а для -257=255 %)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com

 

Ответить

ArkaIIIa

Дата: Понедельник, 06.07.2015, 08:47 |
Сообщение № 7

Группа: Проверенные

Ранг: Ветеран

Сообщений: 894


Репутация:

115

±

Замечаний:
0% ±


2010

ikki
Действительно. Я был не внимателен, извиняюсь, что отнял время.

ikki, vikttur
Спасибо за решения!

 

Ответить

Практическая работа «Шифрование данных. Шифр Виженера»

Цель работы: используя возможности табличного процессора OpenOficce.org Calc, автоматизировать процесс кодирования слов шифром Виженера.

Задание.

С помощью табличного процессора Calc автоматизировать процесс кодирования слов с использованием ключевого слова bank (предполагается, что слова будут состоять только из строчных латинских букв и длина их не будет превышать 10 символов).

Для решения задачи необходимо использовать текстовые функции CHAR и CODE.

Каждая буква текста должна храниться в отдельной ячейке. Величина сдвига должна определяться автоматически (код буквы ключевого слова минус код буквы“a” плюс единица).

Решение для слова geometry

В строке 2 размещается повторяющееся ключевое слово, каждая буква которого задает сдвиг буквы исходного слова.

В строке 3 – значения сдвигов, соответствующие буквам ключевого слова. Эти значения рассчитываются по формуле:

=CODE(B2)-CODE(“a”) + 1.

Функция CODE(символ) в качестве результата дает код из таблицы ASCII для указанного аргумента. Аргументом может быть либо символ, либо адрес ячейки, в которой хранится символ. Т.к. буквы английского алфавита в таблице ASCII расположены по алфавиту и имеют подряд идущие номера, то порядковый номер буквы в алфавите равен коду данной буквы минус код буквы “a” плюс единица. Так вычисляется сдвиг, соответствующий букве ключевого слова.

В строке 4 располагается исходное слово, которое нужно зашифровать.

В ячейках строки 5 размещаются формул шифрования. Формула в ячейке B5 такая:

=CHAR(CODE(“a”) + MOD(CODE(B4) — CODE(“a”) + B3;26))

Функция CHAR(код символа) возвращает символ по значению его ASCII-кода. Функция MOD(делимое; делитель) возвращает остаток от целочисленного деления. Английский алфавит содержит 26 букв. Остатки от деления на 26 – числа в диапазоне от 0 до 25. Это позволяет оставаться в пределах кодов строчных букв английского алфавита: от кода буквы “a” до кода буквы “z”.

Задание 1.

Переименуйте Лист 1 электронной таблицы в Задание 1.

а) Составьте таблицу и автоматизируйте процесс шифрования слова geometry.

б) автоматизируйте процесс шифрования слов algebra и English.

Задание 2.

Перейдите на Лист 2 и переименуйте его в Задание 2.

а) автоматизируйте процесс кодирования слов с использованием ключевого слова файл (предполагается, что слова будут состоять только из строчных русских букв и их длина не будет превышать 10 символов).

б) зашифруйте слова: алгоритм, компьютер, модель.

Задание 3.

Перейдите на Лист 3 и переименуйте его в Задание 3.

а) автоматизируйте процесс дешифрования слова из строчных английских букв;

б) дешифруйте шифры слов из первого задания.

Лабораторная работа 1.1 Изучение классических шифров замены

Цель: изучить
процедуры шифрования и расшифрования в шифрах Цезаря и Виженера.

Технология выполнения задания

Задание 1. Зашифровать
слово с помощью шифра Цезаря.

1.     
В приложении MS Excel создать книгу, содержащую пронумерованные
символы

русского
алфавита: в перовом столбце ввести номера от 0 до 32, во втором – символы
алфавита  по порядку, в третьем – снова нумерация от 0 до 32.

2.     
Выбрать значение ключа равным номеру варианта (от 1 до 18).

3.     
Зашифровать слово «семена» с помощью шифра Цезаря с выбранным
ключом:

ü 
ввести шифруемое слово побуквенно в ячейки первой строки
отформатированной области; важно чтобы символы алфавита в таблице и символы
вводимого слова были набраны в одном регистре;

Рисунок 1. Пример содержания и форматирования книги «Алфавит»

ü 
строкой ниже получить числовой код символов шифруемого слова с
помощью функции ВПР;

ü 
первым параметром (Искомое_значение) функции назначить ссылку на
ячейку с текущим символом шифруемого слова

ü 
вторым параметром (Таблица) функции назначить ссылку на таблицу с
алфавитом начиная со второго столбца (столбцы 2 и 3), ссылку на таблицу сделать
абсолютной нажав кнопку F4

ü 
значение третьего параметра (Номер_столбца) задать равным 2

ü 
в качестве значения четвертого параметра (Интервальный_просмотр)
ввести  слово ложь, например=ВПР(F1;$B$1:$C$33;2;ЛОЖЬ) скопировать
функцию для всех символов шифруемого слова.

Рисунок 2. Пример
вычисления числового кода символа

ü 
строкой ниже получить код символа криптограммы, сложив по модулю
33 полученный код текущего символа со значением ключа: 

                                                        ̶      ввести значение ключа,

 ̶
во второй строке под текущим символом шифруемого слова вставить функцию ОСТАТ

 ̶
в качестве значения первого параметра (Число) функции указать сумму ячейки с
кодом шифруемого символа и ячейки со значением ключа (ссылку на значение ключа
сделать абсолютной),

 ̶
второй параметр (Делитель) задать равным 33, например ОСТАТ(F2+$E$3;33),
скопировать сформированную функцию

ОСТАТ для всех символов шифруемого слова

Рисунок
3. Пример вычисления кода криптограммы, ключ равен 15

ü 
строкой ниже с помощью функции ВПР перевести полученную
криптограмму в символьный вид:

 ̶     в
качестве значения первого параметра функции назначить ссылку на ячейку с
текущим кодом криптограммы

 ̶
в качестве значения второго параметра функции назначить ссылку на таблицу с
алфавитом начиная с первого столбца (столбцы 1 и 2) сделать ссылку на таблицу
абсолютной

                        ̶      значение третьего параметра (Номер_столбца)
задать равным 2

 ̶
в качестве значения четвертого параметра (Интервальный_просмотр) ввести слово
ложь, например =ВПР(F3;$A$1:$B$33;2;ЛОЖЬ) скопировать функцию для всех
символов шифруемого слова

Рисунок 4. Пример текста,
зашифрованного шифром Цезаря

ü 
Проверить результат шифрования с помощью онлайн-калькулятора http://planetcalc.ru/1434/

ü 
Проанализировать полученный текст криптограммы, обратив внимание
на повторяющиеся символы.

Варианты задания

Номер варианта

Ключ

Слово

1

16

арбуз

2

27

сиквел

3

14

ивасаки

4

20

ульсан

5

21

кёнгидо

6

12

пусан

7

10

токио

8

11

сеул

9

13

лекция

10

9

руслан

11

8

линч

12

23

нетфликс

13

4

аниме

14

28

лакруа

15

30

шоколад

16

5

памело

17

2

апельсин

18

19

мандарин

Задание 2. Расшифровать
криптограмму, полученную с помощью шифра Цезаря.

1.     
Выбрать значение ключа шифрования и криптограмму в соответствии с
номером варианта

Номер варианта

Ключ

Криптограмма

1

31

п ж й ж и м л

2

29

ж ь и б з е ы

3

28

ё а з к д и ю

4

27

е ъ к н л я ё ц

5

26

п ю ж ж з к л х

6

25

й л н ж й к ж в

7

24

ж ё г ё й е ё

8

23

з я щ д ц в

9

22

е ъ ё ъ щ х м х

10

21

е г ж ф к э у

11

20

ы у г ь е ю у

12

19

ф б г б у ч ь

13

18

э ъ г ь з с

14

17

с х у х э я г

15

16

я ю ы ш ё ш о

16

15

а ч н ь ч у

17

14

я ц а б н д ц м

18

13

ю х ъ ы ъ х щ

2.     
Расшифровать криптограмму выбранным ключом:

ü 
ввести побуквенно текст криптограммы в ячейки строки
отформатированной области, важно, чтобы символы алфавита в таблице и символы
вводимого слова были набраны в одном регистре

ü 
строкой ниже получить числовой код символов шифруемого слова с
помощью функции ВПР

ü 
строкой ниже получить код из символов расшифрованного текста,
вычтя по модулю 33 значение ключа из полученного кода текущего символа
криптограммы, используя функцию ОСТАТ

Рисунок 5. Пример вычисления кода открытого текста шифра
Цезаря

ü 
строкой ниже с помощью функции ВПР перевести полученный код
криптограммы в символьный вид. Критерием правильности расшифрования является
получение осмысленного слова

Задание 3. Зашифровать
слово с помощью шифра Виженера.

1. Выбрать
значение ключа шифрования в соответствии с номером варианта

Вариант задания

Номер варианта

Ключ

Криптограмма

1

слон

г ф ь а ц ю ч ш е

2

клин

х ф й т ы щ н а у ц и

3

смех

ю м ч ъ ю м ч ю ь м

4

звон

з т ч в ф ж б ц т в

5

приз

м ю н ш т х ы р ъ р

6

лист

ю н э ч ш н д г ф з

7

свет

ь р с я е п н э с ш н с

8

вой

ф у х ж р т ё у ч к у

9

мир

ю к х я ч ф х ч ф

10

час

а н г й а э г я з а я

11

кол

к ю р ц ъ к б ч к

12

слово

ь ъ ь ц ч х р ь ш ч с ч к п э  г ю к

13

клуб

б р я п ь ю б п ь ю п

14

стул

х б е ю е в б ъ г е п

15

флаг

ф ц т ц ф ч ь р г э т я

16

дрель

х т у р ю ф х с р й с я ц ю ш

17

цена

б у ю р ы п а н е ц а ь

18

парус

б и э а ц в р щ к я ю с г и

2. Зашифровать
слово «алфавит» с помощью Виженера с выбранным ключом:

ü 
Ввести побуквенно шифруемое слово в ячейки строки
отформатированной области; важно, чтобы символы алфавита в таблице и символы
вводимого слова были набраны в одном регистре

ü 
Строкой ниже получить числовой код символов шифруемого слова с
помощью  функции ВПР

ü 
Строкой ниже ввести побуквенно ключ шифра Виженера, циклически
повторяя его, пока не будет достигнут конец шифруемого слова

Рисунок 6. Пример создания
ключевой строки шифра Виженера, ключевое слово «сыр»

ü 
Строкой ниже получить числовой код символов ключевой строки с
помощью функции ВПР

ü 
Строкой ниже получить код символа криптограммы, сложив по модулю
33 полученный код текущего символа шифруемого слова с кодом текущего символа
ключевой строки, используя функцию ОСТАТ

Рисунок 7. Пример
вычисления кода криптограммы шифра Виженера

ü 
Строкой ниже с помощью функции ВПР перевести полученный код
криптограммы в символьный вид

ü 
Проверить      результат        шифрования   с          помощью        онлайн-калькулятора
http://planetcalc.ru/2468/

Задание 4. Расшифровать криптограмму, полученную с
помощью шифра Виженера

1.     
Выбрать значение ключа шифрования и криптограмму в
соответствии с номером варианта

2.     
Расшифровать криптограмму выбранным ключом:

ü 
ввести текст криптограммы побуквенно в ячейки строки
отформатированной области; важно, чтобы символы алфавита в таблице и  символ
вводимого слова были набраны в одном регистре

ü 
строкой ниже получить числовой код символов шифруемого слова с
помощью функции ВПР

ü 
строкой ниже сформировать ключевую строку

ü 
строкой ниже получить числовой код символов ключевой строки с
помощью функции ВПР

ü 
строкой ниже получить код символа открытого текста, вычтя по
модулю 33 код текущего символа ключевой строки из кода текущего символа
криптограммы, используя функцию ОСТАТ

ü 
строкой ниже с помощью функции ВПР перевести полученный
код криптограммы в символьный вид. Критерием правильности расшифрования
является получение осмысленного слова.

Рисунок 8. Пример
вычисления кода открытого текста шифра Виженера

27.11.2012 Калькуляторы, шаблоны, форматы, Практикум

Сегодня мы с вами будем заниматься шифрованием в Excel, в частности шифрованием паролей. Если в прошлый раз, мы просто генерировали пароль заданной длины и сложности при помощи встроенного генератора случайных чисел, и получали каждый раз разный пароль, то сегодня мы будем рассматривать пример, в котором при вводе исходного текста и ключевого слова будет всегда получаться одна и та же последовательность символов. Пароль можно сделать достаточно длинным и сложным, и использовать в повседневной практике. Нужно будет лишь помнить исходный текст и ключ, что согласитесь, запомнить гораздо проще, чем длинную последовательность ничего не значащих символов.

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

Шифр Виженера достаточно прост для понимания и основывается на шифре Цезаря. Напомню, что в шифре Цезаря зашифрованное сообщение получается путем сдвига алфавита на какое-то заданное число. Например, если это число 5, то буква А становиться  буквой Д, буква Б становиться буквой Е и т.д. Это один из самых простых алгоритмов шифрования.

Шифр Виженера состоит в последовательном применении нескольких шифров Цезаря, с различными сдвигами, определяемыми ключевым словом. Так если, ключевое слово «ЗАРЯ», то последовательность сдвигов будет следующая «9; 1; 18; 33» т.е. соответствующая порядковым номерам букв ключевого слова в алфавите. Эта последовательность сдвигов применяется к исходному тексту: первый символ смещается на 9 знаков, второй символ исходного текста – на 1 знак, третий – на 18, четвертый – на 33, пятый – снова на 9 и т.д. по кругу. Это уже более сложный алгоритм шифрования, вполне нам подходящий.

После краткого экскурса в криптографию приступим к созданию нашей шифровальной системы в Excel.

По сути дела, нам надо будет укрупненно решить следующие задачи:

Во-первых, обеспечить необходимую длину пароля независимо от исходного текста. В нашем случае пусть это будет 8 и 16 символов.

Во-вторых, получить последовательность символов с учетом сдвигов по ключевому слову соответствующую русским буквам алфавита;

В-третьих, перевести русские буквы алфавита в символы соответствующие латинским буквам, цифрам и специальным знакам;

Применительно к первой задаче, необходимо иметь ввиду главное отличие нашего примера от полноценных шифровальных систем: мы будем шифровать пароль только в одну сторону. Это сильно упрощает задачу. По сути дела, мы можем «обрезать» исходный текст в соответствии с нашей длиной пароля. Однако, в случае, если исходный текст короче максимальной длины нашего пароля (короче 16 символов), то нам все же будет необходимо «дорастить» его до требуемого количества знаков.

При разработке примера мы будем прибегать к средствам программирования, а постараемся решить задачу лишь стандартными встроенными функциями Excel.

Основой нашей разработки, как вы уже догадались, будут являться текстовые функции Excel.

Изначально у нас будет иметься два поля для ввода исходного текста, и ключевого слова.

Для удобства, присвоим имена «пароль» и «ключ» ячейкам, в которые будем вводить соответствующие данные.

Данные у нас вводятся в виде текста, и наша первая задача, отделить каждый символ (букву) друг от друга и поместить в отдельных ячейках.

Для этого мы будем использовать функцию ПСТР, возвращающую заданное число знаков из текстовой строки, начиная с указанной позиции и имеющую следующий синтаксис:

=ПСТР(текст; начальная_позиция; количество_знаков)

Где:

текст – исходный текст. В нашем случае это будет текст из ячеек с именами «пароль» и «ключ»;

начальная_позиция – порядковый номер символа в текстовой строке, начиная с которого будет возвращаться заданное количество знаков. В нашем случае – это будет ссылка на ячейку, содержащую порядковый номер символа, один из 16 номеров.

количество_знаков – соответственно то количество знаков, которое нам надо получить. В нашем случае, поскольку мы будем «растаскивать» слово по буквам, то это будет 1.

Справа от ячеек, в которые будем вводить данные, у нас будет располагаться два диапазона по 16 ячеек расположенных в двух строках для «растаскивания» исходного пароля и ключа на одиночные символы (буквы). В нашем примере, это будет диапазон G6:V6 для растаскивания исходного пароля и G7:V7 для растаскивания ключа. Над этими диапазонами, в ячейках  G5:V5 разместим порядковые номера символов от 1 до 16.

С учетом этого, формула для «растаскивания» будет выглядеть следующим образом:

Для исходного пароля =ПСТР(пароль;G5;1)

Для ключа =ПСТР(ключ;G5;1)

Это для выделения первых символов из исходного пароля и ключа (в примере G5=1).

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

Однако, мы наверняка столкнемся с такой ситуацией, когда исходный пароль или ключ состоит менее чем из 16 знаков. В нашем примере исходный пароль «глобус» имеет 6 знаков, а ключевое слово «заря» — 4 знака.

В этом случае, нам на помощь приходит функция ПОВТОР, повторяющая текст заданное число раз и имеющая следующий синтаксис:

=ПОВТОР(текст; число_повторений)

Где:

тест – текст, который необходимо повторить. В нашем случае это текст из ячеек с именами «пароль» и «ключ».

число_повторений – число повторений текста. В нашем случае мы должны рассчитать необходимое число повторений таким образом, чтобы гарантировано заполнить все 16 символов.

Можно было бы установить число повторений равным 16, что гарантировало бы результат, однако, мы поступим более изящно. Для определения необходимого количества повторов, мы используем функцию ДЛСТР, которая возвращает количество знаков в текстовой строке, и имеющая интуитивно понятный синтаксис:

=ДЛСТР(текст)

Применительно к исходному паролю функция ДЛСТР должна вернуть значение 6, а применительно ключу – значение 4.

Далее совсем просто. Делим 16 на значение возвращаемое функцией ДЛСТР и получаем необходимое число повторов.

16/ДЛСТР(пароль)=2,66666(6)

16/ДЛСТР(ключ)=4

Чтобы избежать дробных значений, используем функцию округления до ближайшего большего значения:

=ОКРУГЛВВЕРХ(число; число_разрядов).

Таким образом, объединив перечисленные выше функции, мы получаем формулу для растаскивания по символам и дублирования, т.е. заполнения каждой из 16 ячеек наших диапазонов для исходного пароля и ключа:

Для пароля  =ПСТР(ПОВТОР(пароль;ОКРУГЛВВЕРХ(16/ДЛСТР(пароль);0));G5;1)

Для ключа: =ПСТР(ПОВТОР(ключ;ОКРУГЛВВЕРХ(16/ДЛСТР(ключ);0));G5;1)

На рисунке представлены результаты применения описанных выше формул.

шифрование пароля в excel

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

В этом нам поможет текстовая функция ПОДСТАВИТЬ, которая позволяет произвести замену старого текста на новый в текстовой строке, и имеющая синтаксис:

=ПОДСТАВИТЬ(текст; стар_текст; нов_текст; [(номер вхождения)])

Где:

текст – текстовая строка, в которой будет осуществляться замена. В нашем случае, это ячейки с именами «Пароль» и «Ключ»;

стар_текст – старый текст, который подлежит замене. В нашем случае это пробел (в формуле указывается в кавычках   » «);

нов_текст – новый текст, которым будет заменен старый текст. В нашем случае это символ нижнего подчеркивания «_»;

[(номер вхождения)] – номер первого символа в текстовой строке, начиная с которого будет осуществляться замена старого текста новым. Можно не ставить ничего, тогда заменены будут все появления старого текста.

Функция замены пробела будет выглядеть следующим образом:

=ПОДСТАВИТЬ(пароль;» «;»_») для пароля и =ПОДСТАВИТЬ(ключ;» «;»_») для ключа.

С учетом этого, после того, как мы подставим эту формулу в нашу общую комбинацию, итоговая формула примет вид:

=ПСТР(ПОВТОР(ПОДСТАВИТЬ(пароль;» «;»_»);ОКРУГЛВВЕРХ(16/ДЛСТР(пароль);0));G5;1) для пароля и,

=ПСТР(ПОВТОР(ПОДСТАВИТЬ(ключ;» «;»_»);ОКРУГЛВВЕРХ(16/ДЛСТР(ключ);0));G5;1) для ключа.

Теперь, чтобы у нас совсем не было накладок, давайте исключим появление заглавных букв во фразах пароля и ключа.

Для этого мы можем воспользоваться функцией СТРОЧН, которая делает все буквы в текстовой строке строчными и имеет интуитивно понятный синтаксис:

=СТРОЧН(текст), где:

текст – текстовая строка, в которой необходимо провести замену заглавных букв строчными.

После подстановки, наша комбинация функций примет вид:

=ПСТР(ПОВТОР(ПОДСТАВИТЬ(СТРОЧН(пароль);» «;»_»);ОКРУГЛВВЕРХ(16/ДЛСТР(пароль);0));G5;1) для пароля и,

=ПСТР(ПОВТОР(ПОДСТАВИТЬ(СТРОЧН(ключ);» «;»_»);ОКРУГЛВВЕРХ(16/ДЛСТР(ключ);0));G5;1) для ключа.

Теперь переходим к решению второй задачи – переводу символов пароля и ключа в числовые значения, необходимые нам для последующей обработки.

Для перевода строчных букв русского алфавита в числовые значения, мы могли бы воспользоваться функцией КОДСИМВ(текст), возвращающую числовой код символа по таблице знаков ANSI.

Поскольку строчные буквы русского алфавита имеют код с 224 по 255 (32 буквы без «ё»), то получить порядковые номера букв лежащих в более привычном диапазоне от 1 до 33 (32), мы можем, отняв от кода символа число 223.

Формула будет иметь вид:

=КОДСИМВ(текст)-223;

Для пароля =КОДСИМВ(ПСТР(ПОВТОР(ПОДСТАВИТЬ(СТРОЧН(пароль);» «;»_»);ОКРУГЛВВЕРХ(16/ДЛСТР(пароль);0));G5;1))-223

Для ключа =КОДСИМВ(ПСТР(ПОВТОР(ПОДСТАВИТЬ(СТРОЧН(ключ);» «;»_»);ОКРУГЛВВЕРХ(16/ДЛСТР(ключ);0));G5;1))-223

Если не использовать в пароле и ключе пробелов и буквы «ё», коды символов которых не входят в наш основной диапазон, то этого вполне достаточно. Однако мы рассмотрим более расширенный вариант.

Для этого будем использовать функцию ПОИСКПОЗ, которая возвращает относительную позицию элемента в массиве, и имеющая синтксис:

=ПОИСКПОЗ(искомое_значение; просматриваемый_массив; [тип_сопоставления]),

Где:

искомое_значение – значение, которое мы будем искать в массиве. В нашем случае это буквы русского алфавита из  фразы пароля и ключа;

просматриваемый_массив – массив со всеми значениями элементов, в котором будет осуществляться поиск. В нашем случае, мы создадим массив состоящий из всех букв русского алфавита и знака подчеркивания в диапазоне ячеек А1:А34. Присвоим данному диапазону имя «кирилица»;

тип_сопоставления – принимает значения 1-меньше, 0-точное совпадение, -1-больше. В нашем случае мы будем искать точное сопоставление.

С учетом того, что символы русского алфавита соответствующие паролю и ключу у нас находятся в диапазонах G6:V6 и G7:V7 соответственно, то формула для перевода букв в числа будет выглядеть следующим образом:

Для первого символа пароля =ПОИСКПОЗ(G6;кирилица;0) и =ПОИСКПОЗ(G7;кирилица;0) для ключа.

Результат можно посмотреть на рисунке.

шифрование пароля в excel

Как видим, мы получили два ряда чисел, находящихся один под другим. Теперь, чтобы наш алгоритм шифрования начал работать, нам необходимо сложить эти числа попарно.

После того как мы получили ряд чисел, переходим к решению третьей задачи – переводу числовых значений в символы латинского алфавита, цифры и спецсимволы.

Для перевода будем использовать функцию ИНДЕКС которая  возвращает значение элемента таблицы или массива, заданного номером строки и номером столбца.

=ИНДЕКС(массив; номер_строки; [номер столбца])

И созданную нами  одномерную таблицу символов из одного столбца и количеством строк по числу используемых нами символов. Таблица символов будет состоять из строчных и заглавных латинских букв, чисел от 1 до 9 и спецсимволов.

Таблица должна иметь 68 строк и 67 символов, со 2 строки по 68. Связано это с тем, что наша исходная таблица с буквами русского алфавита имеет 34 символа, после перевода пароля и ключа в порядковые номера строк этой таблицы и их попарного сложения, мы можем получить числовой ряд с номерами минимум 2 (1+1) и максимум 68 (34+34).

Создаем таблицу символов в диапазоне В1:В68, присваиваем ей имя «латиница», и заполняем символами латинских заглавных и строчных букв, цифр и спецсимволов. Можно заполнять подряд, можно вперемешку. В нашем примере таблица собрана таким образом: заглавная и строчная латинская буква подряд по алфавиту и через каждые девять символов идет цифра (АаВbСс1DdEeFf2…) и в конце спецсимволы. Сделано это для распределения вероятности попадания заглавных строчных букв и цифр.

Таблицу символов можно периодически менять. Это по сути дела еще один этап шифрования.

С учетом того, что числовой ряд, который мы будем кодировать находиться у нас в диапазоне G12:V12, формула для перевода чисел в символы будет иметь вид:

=ИНДЕКС(латиница;G12;1) для первого числа.

Скопировав ее во все 16 ячеек нашего диапазона, мы получим последовательность ничего не значащих символов, чего собственно говоря, мы и добивались.

Теперь остается их только соединить вместе и поместить в одну ячейку.

Сделать это можно при помощи функции СЦЕПИТЬ.

=СЦЕПИТЬ(G14;H14;I14;J14;K14;L14;M14;N14;O14;P14;Q14;R14;S14;T14;U14;V14).

шифрование пароля в excel

Поскольку мы решили сделать в нашем примере возможность выбора между 8 и 16 символами, то добавляем соответствующий элемент управления – «Переключатель».

Добавить Переключатель на лист можно через вкладку Разработчик→ группа Элементы управления→ команда ВставитьЭлементы управления формыПереключатель.

шифрование пароля в excel

Настраиваем переключатель следующим образом:

Правой кнопкой мыши кликаем на переключателе и в появившемся контекстном меню выбираем пункт Формат объекта. В появившемся диалоговом окне Формат элемента управления на вкладке Элемент управления  в поле Связь с ячейкой устанавливаем связь с ячейкой D12.

шифрование пароля в excel

Теперь, поскольку у нас всего два переключателя, то когда установлен первый, в ячейке D12 будет значение 1, когда будет установлен второй – значение 2.

Этого достаточно, чтобы использовать логическую функцию ЕСЛИ и в одном случае сцепить 8 символов, а в другом сцепить 16 символов.

С учетом наличия переключателей, наша формула будет иметь вид:

=ЕСЛИ(D12=1;СЦЕПИТЬ(G14;H14;I14;J14;K14;L14;M14;N14);СЦЕПИТЬ(G14;H14;I14;J14;K14;L14;M14;N14;O14;P14;Q14;R14;S14;T14;U14;V14))

Наш чудо-шифратор пароля готов.

Как обычно выполняем некоторые организационные мероприятия для защиты листа и придания ему надлежащего вида. С этой целью, мы устанавливаем защиту ячеек на всем листе, кроме ячеек D12 (там где меняется параметр после установки переключателя). Чтобы ничего не нарушить случайным образом скрываем столбец D. Скрываем все вспомогательные данные на листе, устанавливая формат данных «;;;» и защищаем лист.

шифрование пароля в excel

В учебном примере на защиту листа пароля нет, и чтобы посмотреть устройства файла нужно просто снять защиту листа на вкладке Рецензирование.

Скачать

Пароль, шифрование

Время на прочтение
1 мин

Количество просмотров 44K

Изучавшие историю криптографии наверняка знают о немецкой шифровальной машине «Энигма», которую нацисты использовали во время Второй мировой войны для шифрования и дешифрования секретных сообщений. Портативный вариант «Энигмы» получил широкое распространение: было выпущено около 100 000 таких устройств.

«Энигма» работала путём постоянного изменения электрической цепи за счёт вращения внутренних роторов, через которые шёл ток. При каждом нажатии буквы на клавиатуре машина выдавала букву шифра, а роторы становились в новую позицию. Таким образом работал полиалфавитный шифр подстановки. Простой версией полиалфавитного шифра является шифр Виженера. Это довольно продвинутый для своего времени — не зная ключевого слова, его было очень трудно сломать (см. криптоанализ «Энигмы»).

Конечно, разобраться в работе «Энигмы» можно, изучив упрощённую электрическую схему. Но сейчас появился ещё одно наглядное пособие, к тому же интерактивное — таблица Excel, которая эмулирует работу роторов «Энигмы» и изменение электрической цепи при каждом нажатии клавиши.

Enigma3.xlsm

Автор этого документа не программист, начинающий пользователь Excel, так что к нему нужно отнестись со снисхождением.

Понравилась статья? Поделить с друзьями:
  • Таблица затрат предприятия excel
  • Таблица для ценников в excel
  • Таблица затрат в excel пример
  • Таблица для финансового учета excel
  • Таблица занятости сотрудников excel