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

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

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

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

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

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
Всем удачи!

 

 

Автор записи: Иван

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.