Среда, 22.01.2025, 11:58
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории каталога
Защита в интернете [12]
Защита информации [6]
Защита локальной сети [4]
Защита компьютера [7]
Наш опрос
Каким пользуютесь антивирусом?
Всего ответов: 99
Форма входа
Поиск
Друзья сайта
Статистика
Защита ПК
Главная » Статьи » Защита информации

Свой алгоритм шифрования
Иногда шифрование может оказаться весьма полезной вещью. В этой статье мы рассмотрим основы шифрования. Рассматривать будем на примерах, написанных на Delphi, так как этот язык знают наверно все, а по необходимости перевести на другой не составит труда.
Начнём с элементарных алгоритмов, без особых наворотов. С начала у нас будет сдвиг. Алгоритм прост:

X:=10;
for i:=1 to Length(s) do
Str[i]:=chr(ord(str[i]-x));

В этом случае ключом к расшифровке будет значение Х. Сдвигать мы можем на любое число, но возьмите на заметку, что при х равном 10 и 266 результат будет одним и тем же, а это заметно сокращает время дешифровки. Но такой алгоритм наверно самый не надёжный. Что же
нам нужно для его дешифровки? Словарь по больше и желание. Алгоритм дешифровки не многим сложнее:

for i := 1 to 256 do
begin
s:=sdvig(dest,i);
if check(s) then memo1.lines.add('['+IntToStr(i)+']->'+s);
end;

Функция Sdvig сдвигает каждый символ строки dest на I и возвращает полученную строку. Функция check работает следующим образом – берём слово их строки s, ищем его с словаре, если не находим не одного слова возвращаем false, дальше есть два варианта, либо мы считаем строку подходящей если все слова есть в словаре или хотя бы одно слово есть в словаре, мне нравится второй случай, так как идеальных словарей не бывает.
Далее рассмотрим не более сложный алгоритм, с использованием функции xor. Как она работает описывать не буду – это в любом учебники по информатике есть, но самая важная для нас её особенность, это то что если мы дважды отксорим переменную с одни и тем же ключом, мы получим исходное значение. Вот самый простой пример:

X:=10;
for i:=1 to Length(s) do
Str[i]:=chr(ord(str[i]) XOR X);

Так же как и в предыдущем случае расшифровывается элементарно, только придётся подождать дольше.
Так же возможен ещё один метод, в нём каждому символу сопоставляется соответствующий символ их ключа. Вот пример:

Procedure Shifr(var S:string);
Const
Al = ‘abcdefghijklmnopqrstvuwxyz’ //латинский алфавит маленькие буквы
Var
X :string = ‘qwertyuiopasdfghjklzxcvbnm’//все маленькие буквы латинского алфавита, в перемешано порядке
I:integer;
Begin
For i:=1 to length(s) do
If pos(s[i],al)o then
S[i]:=x[pos(s[i],al)];
End;

Это алгоритм работает только с маленькими буквами латинского алфавита, но это легко исправимо. Расшифровать строку зашифрованную таким алгоритмом сложнее, тут уже другой подход, просто перебор не поможет, А если мы шифруем ещё и не буквенные символы (т.е. пробелу может соответствовать, скажем, “Ч”), то дешифровка ещё более усложняется.

Так же можно рассмотреть простейшие навороты в алгоритмах. Можно менять значение аргумента при сдвиге и Xor’e, скажем так:

X:=10
For I := 1 to length(S) do
Begin
S[i]:=chr(Ord(s[i])-X);
X:=X+1;
End;

Это в самом простом случае. Так же можно поступить и с Xor’ом. В третьем нашем алгоритме можно разными способами переставлять местами символы ключа. Так же никто не запрещает применять по нескольку способов шифрования с разными ключами и т.д. была бы фантазия , главное самим не запутаться.
Категория: Защита информации | Добавил: Admin (29.11.2007)
Просмотров: 590 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Бесплатный хостинг uCozCopyright MyCorp © 2025