Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2008, 07:33   #1
smoke007
 
Регистрация: 03.01.2008
Сообщений: 5
По умолчанию Помогите решить курсовая горит 9 сдавать...

Необходимо написать программу которая шифрует\дешифрует текст. (метод шифрования не важен). Помогите плз...
smoke007 вне форума Ответить с цитированием
Старый 03.01.2008, 07:41   #2
smoke007
 
Регистрация: 03.01.2008
Сообщений: 5
По умолчанию

Поюзал поиск на форуме нашел вот что:
Код:
program lw7;
uses crt;
const n=255;
var s:string;
i,b:byte;
begin
clrscr;
writeln('Введите предложение:');
readln(s);
for i:=1 to n do
begin
b:=ord(s[i]);
if ((b>=160) and (b<175)) or ((b>=224) and (b<233))
or ((b>=128) and (b<159)) then
b:=b+1
else
begin
if b=175 then b:=224;
if b=239 then b:=160;
if b=159 then b:=128;
end;
s[i]:=chr(b);
end;
writeln('Зашифрованное предложение:');
writeln(s);
readln;
end.
Терь вопрос как сделать обратную прогу т.е. которая будет расшифровывать???

Последний раз редактировалось Alex21; 03.01.2008 в 13:36. Причина: для оформления кода - кнопка CODE
smoke007 вне форума Ответить с цитированием
Старый 03.01.2008, 07:47   #3
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Доброго времени суток. Наверно все читали мою предыдущую статью «Шифруем файл с помощью пароля» (рекомендую прочитать перед прочтением этой статьи). В ней я описал методику шифрования файлов с помощью пароля. Это конечно довольно-таки простая методика. В этой статье я расскажу про более сложную методику шифрования с помощью пароля. Итак, приступим.

В чём уязвимость старого алгоритма? Допустим в файле будет некоторая последовательность одинаковых байт. После шифрования будет видно повторение одной и той же последовательности, которая имеет длину равную длине пароля. Будет видно, на сколько отличаются символы в пароле (например, второй символ на 3 «больше» чем первый, третий на 20 «меньше» чем второй и т.д.). После этого нам только останется перебрать все 256 вариантов пароля, и в итоге файл будет расшифрован в считанные минуты.
Отсюда вывод: не надо обрабатывать данные в файле «данными» пароля, т.е. при шифровании не надо использовать пароль в чистом виде. Один из множества выходов заключается в том, что бы использовать при шифровании некую контрольную сумму пароля. В качестве контрольной суммы будем использовать CRC32 пароля. CRC32 - это урезанный вариант «хеша», который имеет размер не 16 байт, а 4 байта. Следовательно, шаг у нас будет на 1 байт как в прошлом случае, а 4 байта. Вместо прибавления/убавления, по-моему, использовать взаимно обратную логическую операцию XOR (это только моё мнение, возможно, она мне понравилась из-за того, что для неё не надо писать дешифратор, поскольку шифратор также является дешифратором). Использовать одну и ту CRC32 слишком просто, потому что можно подобрать такое слово, у которого CRC32 будет такой же что и у пароля. Поэтому надо будет видоизменять пароль после очередной операции XOR. У видоизменённого пароля CRC32 будет уже совсем другим. Правило изменения пароля будет таким:
1. Текущее смещение в файле делится 4, и делится на длину пароля -1, остаток от деления будет числом K.
2. Символ в пароле, который находится на позиции K, перемещается в конец пароля.
Довольно-таки незамысловатое правило. Но если следовать этому правилу, мы получим исходный пароль после N*(N-1) модификаций. Если использовать пароль длиной 8 символов (средняя длины пароля) то количество модификаций будет 56. Подобрать слово такой же длины, у которого все 56 модификаций имеют такую же CRC32 почти невозможно. Если длина файла не кратна 4 то остаток (1,2 или 3 байта), «ксорится» побайтово с CRC32 текущей модификации пароля.

http://pblog.ru/?p=86 - статья Руслана. там есть ссылки на ранние статьи.
Alar вне форума Ответить с цитированием
Старый 03.01.2008, 09:08   #4
smoke007
 
Регистрация: 03.01.2008
Сообщений: 5
По умолчанию

Написал вот так вот по методу цезаря
Код:
program Crypter;
uses crt;
const
  n = 3;

function CaesarEncipher(toCode: string): string;
var i, T: integer;
begin
  for i := 1 to length(toCode) do begin
    T := (Ord(toCode[ i ]) + n);
    if T >= 256 then dec(T, 256);
    toCode[ i ] := Chr(T);
  end;
  CaesarEncipher := toCode;
end;

function CaesarDecipher(toDecode: string): string;
var i, T: integer;
begin
  for i := 1 to length(toDecode) do begin
    T := (Ord(toDecode[ i ]) - n);
    if T < 0 then Inc(T, 256);
    toDecode[ i ] := Chr(T);
  end;
  CaesarDecipher := toDecode;
end;

var
  s: string;
begin
  s := CaesarEncipher('just a Caesar');
 writeln('Enter text:');
readln(s);

  writeln('Crypt text = ', CaesarDecipher(s));
end.
Но есть проблема в турбо паскале он вылетает после ввода текста (как нажмешь Enter)? а в Pascal ABC все нормально как исправить?

Последний раз редактировалось Alex21; 03.01.2008 в 13:36. Причина: для оформления кода - кнопка CODE
smoke007 вне форума Ответить с цитированием
Старый 03.01.2008, 10:10   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

В Турбо Паскале после writeln('Crypt text = ', CaesarDecipher(s));
нужно написать readln; и нажать Enter или readkey; и нажать любую клавишу.
puporev вне форума Ответить с цитированием
Старый 03.01.2008, 10:59   #6
smoke007
 
Регистрация: 03.01.2008
Сообщений: 5
По умолчанию

puporev . Alar
Спасибо
smoke007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ГОРИТ ДИПЛОМ!!!! пожалуйста помогите разобраться с программой alexs2141 Фриланс 6 03.06.2008 20:30
Помогите горит диплом Zhekoff Помощь студентам 6 26.03.2008 18:18