Учебная работа. Реферат: Программирование на паскале 2

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Реферат: Программирование на паскале 2

Санкт-Петербургский муниципальный
институт аэрокосмического приборостроения

Кафедра № 35

отчет
по
вычислительной практике

Проверила

Коренева Е.А.

Выполнил

студент гр. 3551

Чёрный А.С.

Спб,

2006г.

1. Содержание

1. Содержание……………………………………………………………………………………………………………………2

2. Постановка задачки…………………………………………………………………………………………………3

3. Формализация задачки……………………………………………………………………………………………3

4. метод программки

Метод функции FileExists……………………………………………………………………6

Метод процедуры CheckParameters…………………………………………………7

метод главный программки……………………………………………………………………8

5. Листинг программки

Листинг главный программки………………………………………………………………………13

Листинг модуля………………………………………………………………………………………………………15

6. Отзыв vBulletinо способе шифрования XOR………………………………………17

7. Перечень литературы…………………………………………………………………………………………………18


Воплотить метод шифрования XORс открытым ключом.


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

Операция XORв Паскале эквивалентна сложению по модулю 2 в математической логике.

Разумеется, что повторная обработка XORвернёт всё в начальное состояние.

Чтение и запись будет осуществляться блоками при помощи процедур BlockReadи BlockWriteсоответственно. Привидём некие сведения по данным процедурам.

Процедура
BlockRead

Модуль
System

Предназначение
Считывает одну либо наиболее записей в переменную

Мотивированная платформа
Защищенный режим, настоящий режим, Windows

Описание
procedure BlockRеаd(var f: File; var Buff; Count: Word [;Result: Word ])

Примечания. Параметр f представляет собой файловую переменную, Buff (буфер) — неважно какая переменная, Count (счетчик) — выражение длиной в слово и Result (итог) — это также переменная длиной в слово.

Данная процедура считывает из файла File записи, количество которых не превосходит числа, обозначенного в переменной Count, начиная с первого б, занятого переменной Buff. Действительное число полных считанных записей (наименьшее либо равное значению переменной Count) ворачивается в необязательном параметре Result. Если этот параметр не задан, то в том случае, когда число прочитанных записей не будет совпадать со значением переменной Count, произойдет ошибка ввода-вывода.Параметр f представляет собой файловую переменную, Buff (буфер) — неважно какая переменная, Count (счетчик) — выражение длиной в слово и Result (итог) — это также переменная длиной в слово. Данная процедура считывает из файла File записи, количество которых не превосходит числа, обозначенного в переменной Count, начиная с первого б, занятого переменной Buff. Действительное число полных считанных записей (наименьшее либо равное значению переменной Count) ворачивается в необязательном параметре Result. Если этот параметр не задан, то в том случае, когда число прочитанных записей не будет совпадать со значением переменной Count, произойдет ошибка ввода-вывода. Весь размер переданного блока не превосходит числа б, опрееляемых произведением значения переменной Count и длины записи, указываемой при открытии файла (по дефлоту 128). Если это произведение превосходит 65535 (64К б), то возникает ошибка.

Параметр Result является необязательным. Он работает последующим образом. Если был передан весь блок, то при возврате управления в параметре Result будет содержаться то же случае, если размер записи файла превосходит единицу, то в параметре Result ворачивается число полных прочитанных записей. Таковым образом, вероятная неполная крайняя запись в параметре Result не учитывается.

В итоге выполнения процедуры BlockRеаd текущая позиция в файле продвигается на число записей, данных переменной Result.

При использовании директивы компилятора {$I-} функция IОRеsult будет возвращать 0, если операция закончилась удачно и ненулевой код ошибки в неприятном случае.

BlockWrite записывает Count записей из Buf в F. Запись это блок байтов, размер которого определен процедурами Rewrite либо Reset. Если записи не удается записать на диск, то происходит ощибка периода выполнения. Реакция на ошибку зависит от дерективы $I.

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






5.1 Листинг главный программки

program
CryptIt;

uses

Crt, CryptXor;

var

fileInput, fileOutput : file
;

Key : array
[0..15] of
byte;

Buffer : array
[0..BufferSize-1] of
byte;

strTemp : string
;

KeyLength : byte;

i, j, n, m : Word;

Buffer_For_Mod : byte;

fileInput_Size, ind : longint;

begin

ClrScr;

TextColor(LightBlue);

Writeln (‘CryptIt v1.0’, #10#13);

TextColor(Brown);

Assign(fileInput, Paramstr(1));

Assign(fileOutput, ‘C:fileTemp.txt’);

CheckParameters;

if
FileExists(ParamStr(1)) = false then

begin

Writeln(‘Open file error in ‘, ParamStr (1));

Halt(2);

end

else

Reset(fileInput, 1);

fileInput_Size := FileSize(fileInput);

if
fileInput_Size = 0 then

begin

Writeln(‘File size error ‘, ParamStr(1));

Halt(2);

end
;

Rewrite(fileOutput, 1);

if
FileExists(‘C:fileTemp.txt’) = false then

begin

Writeln(‘Open temp file error’);

Halt(2);

end
;

strTemp := ParamStr(2);

KeyLength := Length(strTemp);

if
KeyLength > 16 then
KeyLength := 15;

for
i := 1 to
KeyLength do

Key[i-1] := not
(ord(strTemp[i]));

i := 0;

ind := 0;

n := 0;

Writeln(‘In progres. Wait, please…’);

for
j := 1 to
fileInput_Size div
BufferSize do

begin

BlockRead (fileInput, Buffer, BufferSize);

if
IOResult <> 0 then

begin

Writeln(‘Reading error ‘, ParamStr(1));

Halt(3);

end
;

for
m := 0 to
BufferSize — 1 do

begin

Buffer[n] := Buffer[n] xor
Key[i];

inc(i);

if
i > KeyLength then
i := 0;

inc(n);

if
n > BufferSize — 1 then
n := 0;

end
;

BlockWrite(fileOutput, Buffer, BufferSize);

if
IOResult <> 0 then

begin

Writeln(‘Temp file writing error ‘);

Halt (4);

end
;

end
;

for
j := 1 to
fileInput_Size mod
BufferSize do

begin

BlockRead(fileInput, Buffer_For_Mod, 1);

if
IOResult <> 0 then

begin

Writeln(‘Reading error ‘, ParamStr(1));

Halt(3);

end
;

Buffer_For_Mod := Buffer_For_Mod xor
Key[i];

inc(i);

if
i > KeyLength then
i := 0;

BlockWrite (fileOutput,Buffer_For_Mod,1);

if
IOResult <> 0 then

begin

Writeln(‘Temp file writing error ‘);

Halt(4);

end
;

end
;

Close(fileInput);

Close(fileOutput);

Erase(fileInput);

Rename(fileOutput, ParamStr(1));

if
IOResult <> 0 then

begin

Writeln(‘Temp file rename error’);

Halt(2);

end
;

Writeln (‘Successful. Press any key for exit…’);

Readkey;

end
.

5.2 Листинг модуля

unit
CryptXor;

interface

const

BufferSize = 16 * 1024;

function
FileExists(Filename : string
) : Boolean;

procedure
CheckParameters;

implementation

function
FileExists(Filename : string
) : Boolean;

var

F : File
;

begin

Assign(F, Filename);

Reset(F, 1);

Close(F);

if
IOresult = 0 then
FileExists := true

else
FileExists := false;

end
;

procedure
CheckParameters;

begin

if
ParamCount < 2 then

begin

Writeln(‘Please, run it as -> cryptit <file> <key>’);

Writeln(‘Press any key for exit…’);

asm

mov ah,10h

int 16h

end
;

Halt(1);

end
;

end
;

end
.








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

1. Определим длину ключа при помощи процедуры, известной как подсчет совпадений. Применим операцию XOR к шифротексту, используя в качестве ключа сам шифротекст с разными смещениями, и подсчитаем совпадающие байты. Если величина смещения кратна длине ключа, то совпадет выше 6 процентов байтов. Если нет, то будут совпадать меньше чем 0.4 процента (считая, что обыденный ASCII текст кодируется случайным ключом, для остальных типов открытых текстов числа будут иными). Это именуется показателем совпадений. Малое смещение от 1-го значения, кратного длине ключа, к другому и есть длина ключа.

2. Сместим шифротекст на эту длину и проведем операцию XOR для смещенного и необычного шифротекстов. Результатом операции будет удаления ключа и получение открытого текста, подвергнутого операции XOR с самим собой, смещенным на длину ключа. Потому что в британском языке на один б приходится 1.3 бита реальной инфы, существующая значимая избыточность дозволяет найти метод шифрования. Невзирая на это, количество поставщиков программного обеспечения, навязывающих этот игрушечный метод в качестве «практически такового же неопасного как DES», впечатляет. Конкретно этот метод (с 160-битным циклическим «ключом») NSA в конце концов разрешило применять в цифровых телефонных сотовых сетях для закрытия голоса. XOR может защитить ваши файлы от младшей сестры, но реального криптоаналитика задержит только на считанные секунды.


1. Фаронов В.В. ТР.7.0. Исходный курс. Учебное пособие. Издание седьмое, переработанное. М.: «Нолидж», 2000.-576с.; ил.

2. Юров В.И. ASSEMBLER, учебник для вузов. 2-ое издание СПб.: Питер, 2004.-637с.; ил.

3. ГОСТ 19.701-90(ISO 5807-85)

]]>