Шифр Виженера для защиты данных в 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
 
Всем удачи!

 

 

Post Author: Иван

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