48297 (Програмна реалізація криптографічного алгоритму RC5), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Програмна реалізація криптографічного алгоритму RC5", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48297"

Текст 2 страницы из документа "48297"

Рис.4. Алгоритм процедури EncriptStream

Рис.4. Алгоритм процедури DecriptStream

6. Листінг тесту програми

unit RC5;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TRC5Block = array[1..2] of LongWord;

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

StaticText1: TStaticText;

StaticText2: TStaticText;

Button1: TButton;

Button2: TButton;

Button3: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

Rounds = 12;

BlockSize = 8;

BufferSize = 2048;

KeySize = 64;

KeyLength = 2 * (Rounds + 1);

P32 = $b7e15163;

Q32 = $9e3779b9;

var

Form1: TForm1;

Key : string;

KeyPtr : PChar;

S : array[0..KeyLength-1] of LongWord;

///////////////////////////////////////////////////////////////////////////////

Додаткові функції

procedure Initialize(AKey: string); // Інійіалізація

procedure CalculateSubKeys; // Підготовлення підключей

function EncipherBlock(var Block): Boolean; // Шифрування блока (8 байт)

function DecipherBlock(var Block): Boolean; // Дешифрування блока

///////////////////////////////////////////////////////////////////////////////

Головні функції

function EncryptCopy(DestStream, SourseStream : TStream; Count: Int64;

Key : string): Boolean; // Зашифрувати дані з одного потоку в іншій

function DecryptCopy(DestStream, SourseStream : TStream; Count: Int64;

Key : string): Boolean; // Розшифрувати дані з одного потоку в іншій

function EncryptStream(DataStream: TStream; Count: Int64;

Key: string): Boolean; // Зашифрувати вміст потоку

function DecryptStream(DataStream: TStream; Count: Int64;

Key: string): Boolean; // Розшифрувати вміст потоку

implementation

{$R *.dfm}

////////////////////////////////////////////////////////////////////////////////

function ROL(a, s: LongWord): LongWord;

asm

mov ecx, s

rol eax, cl

end;

////////////////////////////////////////////////////////////////////////////////

function ROR(a, s: LongWord): LongWord;

asm

mov ecx, s

ror eax, cl

end;

////////////////////////////////////////////////////////////////////////////////

procedure InvolveKey;

var

TempKey : string;

i, j : Integer;

K1, K2 : LongWord;

begin

// Розгортання ключа до довжини 64 символи

TempKey := Key;

i := 1;

while ((Length(TempKey) mod KeySize) <> 0) do

begin

TempKey := TempKey + TempKey[i];

Inc(i);

end;

// Зараз скоротіть ключ знизу до одного KeySize блоку об'єднуючи байти

i := 1;

j := 0;

while (i < Length(TempKey)) do

begin

Move((KeyPtr+j)^, K1, 4);

Move(TempKey[i], K2, 4);

K1 := ROL(K1, K2) xor K2;

Move(K1, (KeyPtr+j)^, 4);

j := (j + 4) mod KeySize;

Inc(i, 4);

end;

end;

////////////////////////////////////////////////////////////////////////////////

procedure Initialize(AKey: string);

begin

Key := AKey;

GetMem(KeyPtr, KeySize);

FillChar(KeyPtr^, KeySize, #0);

InvolveKey;

end;

////////////////////////////////////////////////////////////////////////////////

{$R-,Q-}

procedure CalculateSubKeys;

var

i, j, k : Integer;

L : array[0..15] of LongWord;

A, B : LongWord;

begin

// Copy the key into L

Move(KeyPtr^, L, KeySize);

// Зараз ініціалізуйте S

S[0] := P32;

for i := 1 to KeyLength-1 do

S[i] := S[i-1] + Q32;

// Зараз видирається таблиця S з ключем

i := 0;

j := 0;

A := 0;

B := 0;

for k := 1 to 3*KeyLength do

begin

A := ROL((S[i] + A + B), 3);

S[i] := A;

B := ROL((L[j] + A + B), (A + B));

L[j] := B;

i := (i + 1) mod KeyLength;

j := (j + 1) mod 16;

end;

end;

////////////////////////////////////////////////////////////////////////////////

function EncipherBlock(var Block): Boolean;

var

RC5Block : TRC5Block absolute Block;

i : Integer;

begin

Inc(RC5Block[1], S[0]);

Inc(RC5Block[2], S[1]);

for i := 1 to Rounds do

begin

RC5Block[1] := ROL((RC5Block[1] xor RC5Block[2]), RC5Block[2]) + S[2*i];

RC5Block[2] := ROL((RC5Block[2] xor RC5Block[1]), RC5Block[1]) + S[2*i+1];

end;

Result := TRUE;

end;

////////////////////////////////////////////////////////////////////////////////

function DecipherBlock(var Block): Boolean;

var

RC5Block : TRC5Block absolute Block;

i : Integer;

begin

for i := Rounds downto 1 do

begin

RC5Block[2] := ROR((RC5Block[2]-S[2*i+1]), RC5Block[1]) xor RC5Block[1];

RC5Block[1] := ROR((RC5Block[1]-S[2*i]), RC5Block[2]) xor RC5Block[2];

end;

Dec(RC5Block[2], S[1]);

Dec(RC5Block[1], S[0]);

Result := TRUE;

end;

////////////////////////////////////////////////////////////////////////////////

// Реалізація головних функції

function EncryptCopy(DestStream, SourseStream : TStream; Count: Int64;

Key : string): Boolean;

var

Buffer : TRC5Block;

PrCount : Int64;

AddCount : Byte;

begin

Result := True;

try

if Key = '' then

begin

DestStream.CopyFrom(SourseStream, Count);

Exit;

end;

Initialize(Key);

CalculateSubKeys;

PrCount := 0;

while Count - PrCount >= 8 do

begin

SourseStream.Read(Buffer, BlockSize);

EncipherBlock(Buffer);

DestStream.Write(Buffer, BlockSize);

Inc(PrCount, 8);

end;

AddCount := Count - PrCount;

if Count - PrCount <> 0 then

begin

SourseStream.Read(Buffer, AddCount);

DestStream.Write(Buffer, AddCount);

end;

except

Result := False;

end;

end;

////////////////////////////////////////////////////////////////////////////////

function DecryptCopy(DestStream, SourseStream : TStream; Count: Int64;

Key : string): Boolean;

var

Buffer : TRC5Block;

PrCount : Int64;

AddCount : Byte;

begin

Result := True;

try

if Key = '' then

begin

DestStream.CopyFrom(SourseStream, Count);

Exit;

end;

Initialize(Key);

CalculateSubKeys;

PrCount := 0;

while Count - PrCount >= 8 do

begin

SourseStream.Read(Buffer, BlockSize);

DecipherBlock(Buffer);

DestStream.Write(Buffer, BlockSize);

Inc(PrCount, 8);

end;

AddCount := Count - PrCount;

if Count - PrCount <> 0 then

begin

SourseStream.Read(Buffer, AddCount);

DestStream.Write(Buffer, AddCount);

end;

except

Result := False;

end;

end;

////////////////////////////////////////////////////////////////////////////////

function EncryptStream(DataStream: TStream; Count: Int64; Key: string): Boolean;

var

Buffer : TRC5Block;

PrCount : Int64;

begin

Result := True;

try

if Key = '' then

begin

DataStream.Seek(Count, soFromCurrent);

Exit;

end;

Initialize(Key);

CalculateSubKeys;

PrCount := 0;

while Count - PrCount >= 8 do

begin

DataStream.Read(Buffer, BlockSize);

EncipherBlock(Buffer);

DataStream.Seek(-BlockSize, soFromCurrent);

DataStream.Write(Buffer, BlockSize);

Inc(PrCount, 8);

end;

except

Result := False;

end;

end;

////////////////////////////////////////////////////////////////////////////////

function DecryptStream(DataStream: TStream; Count: Int64; Key: string): Boolean;

var

Buffer : TRC5Block;

PrCount : Int64;

begin

Result := True;

try

if Key = '' then

begin

DataStream.Seek(Count, soFromCurrent);

Exit;

end;

Initialize(Key);

CalculateSubKeys;

PrCount := 0;

while Count - PrCount >= 8 do

begin

DataStream.Read(Buffer, BlockSize);

DecipherBlock(Buffer);

DataStream.Seek(-BlockSize, soFromCurrent);

DataStream.Write(Buffer, BlockSize);

Inc(PrCount, 8);

end;

except

Result := False;

end;

end;

// Завершення головних функції ...

////////////////////////////////////////////////////////////////////////////////

{$R+,Q+}

procedure TForm1.Button1Click(Sender: TObject);

var

SourseStream : TFileStream;

begin

SourseStream := TFileStream.Create(Edit1.Text, fmOpenReadWrite);

EncryptStream(SourseStream, SourseStream.Size, Edit2.Text);

SourseStream.Free;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

SourseStream : TFileStream;

begin

SourseStream := TFileStream.Create(Edit1.Text, fmOpenReadWrite);

DecryptStream(SourseStream, SourseStream.Size, Edit2.Text);

SourseStream.Free;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Close

end;

end.

7. Інструкція зі користування програмою

Нижченаведений інтерфейс програми-шифрувальника, що створений засобами Delphi організовує шифрування / дешифрування файлу (рис.6) з використанням функцій EncryptStream / DecryptStream ():

Рис.6. Вікно програми-шифрувальника

До поля „Файл-Джерело” вводиться шлях до файлу з розширенням *.txt чи *.doc, що необхідно зашифрувати, наприклад, C:\instLog.txt, а до поля „Ключ” вводиться ключ шифрування, наприклад, 135 (рис.7).

Рис.7. Введення вхідних даних до полів вікна програми шифрувальника

При натисканні кнопки „Зашифрувати”, здійснюється шифрування змісту файла instLog.txt (рис.8).

Рис.8. Шифрування змісту файла instLog.txt

Для розшифровування файлу також до поля „Файл-Джерело” вводиться шлях до зашифрованого файлу з розширенням *.txt, наприклад, C:\instLog.txt, а до поля „Ключ” вводиться тій же ключ шифрування, 135 та натискується кнопка „Розшифрувати”, файл стає розшифрованим, яким й був (рис.9).

Рис.9. Розшифрований файл instLog.txt.

Для виходу з програми треба натиснути кнопку „Вихід”

Висновки та рекомендації

В даній курсовій роботі була розроблена програмна реалізація криптографічного алгоритму RC5. Була написана програма-шифрувальник на підставі криптографічного алгоритму RC5 у середовищі Delphi.

Але завжди Проблеми забезпечення збереження значно ускладнюються при організації машинної обробки інформації в умовах колективного користування, де зосереджена, обробляється і накопичується інформація різного призначення і приналежності.

Не існує яких-небудь причин, по яких в системах машинної обробки даних, що базуються на сучасних засобах обчислювальної техніки, неможливо було б забезпечити великий ступінь захисту і збереження даних, чим в звичайних системах збору, накопичення і обробки інформації. Система повинна захищати своїх користувачів один від одного як від випадкових, так і цілеспрямованих погроз порушення збереженню інформації. Крім того, прийняті механізми забезпечення збереження повинні надавати користувачеві засобу для захисту його програм і даних також і від нього самого.

Вдосконалення технології обробки інформації привело до створення інформаційних баз даних і знань, що містять великі обсяги різноманітної інформації, що теж пред'являє додаткові вимоги до забезпечення збереження і захисту інформації.

У системах колективного користування, що мають розвинену мережу терміналів, основна складність забезпечення безпеки полягає в тому, що потенційний порушник є (може бути) повноправним абонентом системи.

Тому під терміном "захист" мається на увазі спосіб забезпечення безпеки в СОД. Захист інформації зазвичай зводиться до вибирання засобів контролю за виконанням програм, що мають доступ до інформації (файлів), що зберігається в системі обробки даних (СОД).

Список використаної літератури

  1. Наказ ДСТСЗІ СБ України від 29 грудня 1999 року № 62 „Про затвердження Положення про державну експертизу в сфері технічного захисту інформації”.

  2. НД ТЗІ 2.5-005-99 Класифікація автоматизованих систем і стандартні функціональні профілі захищеності оброблюваної інформації від несанкціонованого доступу.

  3. НД ТЗІ 2.5-004-99 Критерії оцінки захищеності інформації в комп’ютерних системах від несанкціонованого доступу.

  4. Наказ ДСТСЗІ СБ України від 25.12.2000 року № 62 про введення в дію нормативного документу "Положення про державну експертизу у сфері криптографічного захисту інформації".

  5. Державна експертиза з технічного захисту інформації операційної системи Windows XP Professional SP2. Перелік свідоцтв.

  6. ГОСТ Р ИСО/МЭК 15408-1-02 Информационная технология. Методы и средства обеспечения безопасности. Критерии оценки безопасности информационных технологий. - Госстандарт России. - Москва – 2002.

  7. Операционная система Microsoft Windows Professional Service Pack 1A. Задание по безопасности MS.Win_XP_SP1A.ЗБ. Версия 1.0.

  8. Нормативний документ Гостехкомісії Росії. Безопасность информационных технологий. Операционные системы. Клиентские операционные системы. Профиль защищенности. Версия 1.0, 2003.

  9. [CTCPEC] Canadian Trusted Computer Product Evaluation Criteria, Version 3.0, Canadian System Security Centre, Communications Security Establishment, Government of Canada, January 1993.

  10. [FC] Federal Criteria for Information Technology Security, Draft Version 1.0, (Volumes I and II), jointly published by the National Institute of Standards and Technology and the National Security Agency, US Government, January 1993.

  11. [ITSEC] Information Technology Security Evaluation Criteria, Version 1.2, Office for Official Publications of the European Communities, June 1991

  12. НД ТЗІ 2.5-008-2002 Вимоги із захисту конфіденційної інформації від несанкціонованого доступу під час оброблення в автоматизованих системах класу 2.

  13. Microsoft® Windows® Internals, Fourth Edition: Microsoft Windows Server™ 2003, Windows XP, and Windows 2000 / David A. Solomon, Mark Russinovich. Microsoft Press A Division of Microsoft Corporation One Microsoft Way Redmond, Washington, - 2004.

  14. Microsoft Trainig and Certification. 2272B: Implemeting and Supporting Microsoft Windows XP Professional. Microsoft 2001.

  15. Microsoft Trainig and Certification. 2823A: Implemeting and Administering Security in a Microsoft Windows Server 2003 Network. Microsoft 2004.

  16. НД ТЗІ 1.1-003-99 Термінологія в галузі захисту інформації в комп’ютерних системах від несанкціонованого доступу.

  17. НД ТЗІ 1.1-002-99 Загальні положення щодо захисту інформації в комп'ютерних системах від несанкціонованого доступу.

  18. Гайкович В, Першин А. Безопасность электронных банковских систем. - М.,1999.

  19. Груздев С. "16 вариантов русской защиты" /КомпьютерПресс №392

  20. Карасик И. Программные и аппаратные средства защиты информации для персональных компьютеров / /КомпьютерПресс №3, 1995

  21. Мафтик С. Механизмы защиты в сетях ЭВМ. /пер. с англ. М.: МИР, 1993.

  1. Петров В.А., Пискарев С.А., Шеин А.В. Информационная безопасность. Защита информации от несанкционированного доступа в автоматизированных системах. - М., 1998.

  2. Спесивцев А.В. и др. Защита информации в персональных ЭВМ. - М.: Радио и связь, 1993.

  3. Грибунин В.Г. Политика безопасности: разработка и реазизация // «Информационная безопасность», 2005, №1.

  4. Домарев В.В. Безопасность информационных технологий. Системный подход. - К.: ООО ТИД «Диасофт», 2004. - 992 с.

  5. Ярочкин В.И. Информационная безопасность: Учебник для студентов Вузов. М.: Академический Проект; Фонд "Мир", 2003, 640 с.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4098
Авторов
на СтудИзбе
673
Средний доход
с одного платного файла
Обучение Подробнее