на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Програмна реалізація криптографічного алгоритму RC5
p align="left">

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

Рис.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.

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

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

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

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

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

Страницы: 1, 2



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.