Оценка экономической эффективности разработки




С учетом того, что в среднем предполагается продавать в год 30 копий программы, то себестоимость одной копии программы будет вычисляться по следующей формуле:

 

 

C2 = Собщ/n, (6.4)

где: C2 - стоимость разработки программного средства из 30 копий;

Собщ - общая стоимость разработки данного программного средства;

n - число копий.

C2 = 2484/10 = 248,4.

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

В ходе исследования рынка аналогичных программных продуктов было выявлено, что самый дешевый найденный аналог стоит 2500 рублей.

Расчет годового экономического эффекта производится по формуле:

, (6.5)

где , стоимость аналогичного программного продукта и разработанного, руб.;

- нормативный коэффициент экономической эффективности ( =0,33);

- капитальные вложения на проектирование и внедрение проектируемой системы, руб.;

Согласно формулы (6.5), годовой экономический эффект равен:

=(2500-323) - 0,33 * 2484 = 1358 руб.

Расчетный коэффициент экономической эффективности показывает величину экономии на текущих эксплуатационных затратах, образующихся за счет внедрения новой системы, на один рубль единовременны капитальных вложений и рассчитывается по формуле (6.6):

Е = Э / К (6.6)

E=1358/ 2484= 0,54

Так как Е>0,33, то проектирование и внедрение проектируемой системы эффективно.

Расчетный условный срок окупаемости капитальных вложений определяется как величина, обратная расчетному коэффициенту экономической эффективности (6.7):

Ток = К / Э (6.7)

Tок = 2484/ 1358 = 1,82 или 21 месяцев.

Тк - нормальный срок окупаемости = 3 года;

Тк > Ток - условие выполняется.

Таким образом, разработка и внедрение системы является эффективной.

 

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

 


ЗАКЛЮЧЕНИЕ

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

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

Для разработки программы была выбрана среда разработки Microsoft Visual Studio 2008 и язык программирования C#, на котором достаточно просто и легко создавать подобного рода приложения с использованием встроенных компонентов.

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

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

Программный продукт полностью соответствует требованиям, которые были предъявлены на дипломное проектирование.

Существует возможность дальнейшее доработки и модификации программы:

− внедрение нескольких алгоритмов шифрования;

− внедрение алгоритма хеширования;

− добавление проигрывателя;

− модернизация интерфейса.


БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Артёхиц Б.В. Стеганография II Журнал "Защита информации. Конфидент",2010. - №4. - С.47-50.

2. D. Kahn, The Code-Breakers: The Story of Secret Writing. MacMillan Publishing Company, New York, USA, 2011.

3. Хорошко В.О., Азаров О.Д., Шелест О.А. Основы компьютерной стеганографии.Начальное пособие для студентов и аспирантов. - Венеция: ВДТУ, 2013. - 143 с.

4. Барсуков B.C., Романцов А.П. Компьютерная стеганография: вчера, сегодня, завтра. Технологии информагщонной безопасности XXI века. - материалы Internet-ресурса ≪Специальная техника≫ (https://st.ess.rii/).

5. Грибунин В.Г., Оков И.Н., Туринцев И.В. Цифровая стеганография. - М.:

Солон-Пресс, 2012. — 272 с.

6. Генне О.В. Основные положения стеганографии // Журнал "Защита информации. Конфидент", №З, 2010.

7. Кустов В.Н., Федчук А.А. Методы встраивания скрытых сообщений // Журнал "Защита информации. Конфидент", №3, 2010, с.34.

8. Быков С.Ф. Алгоритм сжатия JPEG с позиции компьютерной стеганографии //"Защита информации. Конфидент", №3,2010, с.26.

9. АнинБ.Ю. Защита компьютерной информации. — СПб.: BHV - Санкт-

Петербург, 2010. - 284 с.

10. Соколов А.В., Шаньгин В.Ф. Защита информации в распределённых корпоративных сетях и системах. - М.: ДМК Пресс, 2012. — 656 с.

11. Барсуков B.C. Стеганографические технологии защиты документов, авторских прав и информации // Обзор специальной техники. — 2010. — №2. — С.31-40.

12. Конахович Г.Ф., Пузыренко А.Ю., Компьютерная стеганография. Теория и практика. - М.:МК - Пресс, 2010 - 286с.

13. Информационный ресурс исследовательской группы "CNews Analytics" (https://www.cnews.ru/).

14. Лабор В.В. Си Шарп: Создание приложений для Windows. - Мн.Харвест, 2013. - 384 с.

15. Прозис Дж. Программирование для Microsoft.NET. — М.: Издательско-торговый дом Русская Редакция, 2013- 704 стр.: ил.

16. Петцольд Ч. Программирование для Microsoft Windows на C#.— М.: Издательско-торговый дом Русская Редакция, 2012- 576 стр.: ил.

17. СанПиН 2.1.2.1331-03.

18. Белов Н. Безопасность жизнедеятельности. М.: Знание. 364 с.

19. ГОСТ 12.1.004-91. Пожарная безопасность. Общие требования, М.

20. Зинченко В. Основы эргономики. М.: МГУ. 179 с.


ПРИЛОЖЕНИЯ

Приложение А

Исходный код программы

Код процедуры открытия файла - контейнера:

 

public bool OpenWavFile(string wNameFile,int nF)

{

int i, sizechunk;

bool ff = false;

byte[] karet;

if (nF == -1)

{

Riff.Add(new wRiff());

NameFiles.Add(wNameFile);

nF = Riff.Count - 1;

}

else

{

NameFiles.RemoveAt(nF);

NameFiles.Insert(nF, wNameFile);

ff = true;

}

//считываем первые четыре байта идентификатора Riff;

karet = new byte[4];

FileStream wFile = new FileStream(wNameFile, FileMode.Open, FileAccess.Read);

wFile.Read(karet,0,4);

if ((karet[0] == 'R') & (karet[1] == 'I') & (karet[2] == 'F') & (karet[3] == 'F'))

{

Riff[nF].headerRIFF = new char[4];

for (i = 0; i <= 3; i++)

Riff[nF].headerRIFF[i] = (char)karet[i];

}

else

{

MessageBox.Show("Открываемый файл, не формата *.wav", "Информация", MessageBoxButtons.OK);

Riff.RemoveAt(nF);

wFile.Close();

wFile.Dispose();

wFile = null;

return(false);

}

//считываем следующие 4 байта, длина чанка Riff;

wFile.Read(karet, 0, 4);

Riff[nF].sizeRIFF = BitConverter.ToInt32(karet, 0);

//считываем следующие четыре байта идентификатора WAVE;

wFile.Read(karet, 0, 4);

if ((karet[0] == 'W') & (karet[1] == 'A') & (karet[2] == 'V') & (karet[3] == 'E'))

{

Riff[nF].headerWAVE = new char[4];

for (i = 0; i <= 3; i++)

Riff[nF].headerWAVE[i] = (char)karet[i];

}

else

{

Riff.RemoveAt(nF);

MessageBox.Show("Не верный файл!", "Информация", MessageBoxButtons.OK);

return (false);

}

while (!(wFile.Length == wFile.Position))

{

//считываем следующие четыре байта идентификатора fmt;

wFile.Read(karet, 0, 4);

if ((karet[0] == 'f') & (karet[1] == 'm') & (karet[2] == 't') & (karet[3] == ' '))

{

Riff[nF].headerFMT = new char[4];

for (i = 0; i <= 3; i++)

Riff[nF].headerFMT[i] = (char)karet[i];

//считываем следующие 4 байта, длина чанка fmt;

wFile.Read(karet, 0, 4);

Riff[nF].sizeFMT = BitConverter.ToInt32(karet, 0);

karet = new byte[2];

//считывание категории формата

wFile.Read(karet, 0, 2);

Riff[nF].FormatTag = BitConverter.ToInt16(karet, 0);

//считывание количества каналов

wFile.Read(karet, 0, 2);

Riff[nF].Channels = BitConverter.ToInt16(karet, 0);

karet = new byte[4];

//считывание количества сэмплов в секунду

wFile.Read(karet, 0, 4);

Riff[nF].SamplesPerSec = BitConverter.ToInt32(karet, 0);

//считывание среднее число байт в сек

wFile.Read(karet, 0, 4);

Riff[nF].AvgBytesPerSec = BitConverter.ToInt32(karet, 0);

karet = new byte[2];

//считывание выравнивание данных в дата-чанке

wFile.Read(karet, 0, 2);

Riff[nF].BlockAlign = BitConverter.ToInt16(karet, 0);

//считывание бит в сэмпле

wFile.Read(karet, 0, 2);

Riff[nF].BitPerSample = BitConverter.ToInt16(karet, 0);

wFile.Seek(Riff[nF].sizeFMT - 16, SeekOrigin.Current);

karet = new byte[4];

}

else

if ((karet[0] == 'd') & (karet[1] == 'a') & (karet[2] == 't') & (karet[3] == 'a'))

{

wFile.Read(karet, 0, 4);

Riff[nF].sizeDATA = BitConverter.ToInt32(karet, 0);

//если бит в семпле 16

if (Riff[nF].BitPerSample == 16)

{

Riff[nF].DataChunk16 = new UInt16[Riff[nF].sizeDATA / 2];

karet = new byte[2];

for (i = 0; i < Riff[nF].sizeDATA / 2; i++)

{

wFile.Read(karet, 0, 2);

Riff[nF].DataChunk16[i] = BitConverter.ToUInt16(karet, 0);

}

}

//если бит в семпле 8

if (Riff[nF].BitPerSample == 8)

{

Riff[nF].DataChunk8 = new byte[Riff[nF].sizeDATA];

karet = new byte[1];

for (i = 0; i < Riff[nF].sizeDATA; i++)

{

wFile.Read(karet, 0, 1);

Riff[nF].DataChunk8[i] = karet[0];

}

}

break;

}

else

{

//если встречается необязательная чанка, то размер чанки рифф уменьшается на размер необязательной чанки

wFile.Read(karet, 0, 4);

//Riff.sizeRIFF = Riff.sizeRIFF - 4;

sizechunk = BitConverter.ToInt32(karet, 0);

//Riff.sizeRIFF = Riff.sizeRIFF - sizechunk;

wFile.Seek(sizechunk, SeekOrigin.Current);

}

 

}

if (Riff[nF].BitPerSample >16)

{

if (ff==false)

Riff.RemoveAt(nF);

MessageBox.Show("Программа работает только с wav-файлами, число бит семпле которых равно либо 8, либо 16!", "Информация", MessageBoxButtons.OK);

wFile.Close();

wFile.Dispose();

wFile = null;

return (false);

}

wFile.Close();

wFile.Dispose();

wFile = null;

return (true);

}

 

Код процедуры сокрытия файла:

 

public void OpenAnyFile(string aNameFile, LoadingDelegate deleg, int bt, int saveitem, int uShif, byte[] key, byte[] IV)

{

long i, k,j,check;

int l;

byte[] karet;

chbit = bt;

if (uShif == 1)

{

FileStream sFile = new FileStream(aNameFile, FileMode.Open, FileAccess.ReadWrite);

byte[] charkar = new byte[1];

sizeFile = sFile.Length;

l = 0;

check = 0;

for (l = 0; l <= Riff.Count - 1; l++)

{

if (Riff[l].BitPerSample == 16)

check = check + Riff[l].sizeDATA / 16;

if (Riff[l].BitPerSample == 8)

check = check + Riff[l].sizeDATA / 8;

}

if (check < sizeFile * 8)

{

MessageBox.Show("Размер открываемого файла больше чем размер файлов контейнеров!", "Информация", MessageBoxButtons.OK);

sFile.Close();

sFile = null;

return;

}

byte[] sByteFile = new byte[sizeFile];

for (i = 0; i < sizeFile; i++)

{

sFile.Read(charkar, 0, 1);

sByteFile[i] = charkar[0];

}

sFile.Close();

sFile = null;

bufmem = new MemoryStream();

Rijndael RijndaelAlg = Rijndael.Create();

CryptoStream cStream = new CryptoStream(bufmem, RijndaelAlg.CreateEncryptor(key, IV), CryptoStreamMode.Write);

try

{

cStream.Write(sByteFile, 0, sByteFile.Length);

cStream.FlushFinalBlock();

}

catch (Exception er)

{

Console.WriteLine("An error occurred: {0}", er.Message);

return;

}

finally

{

FileStream aaa = File.Open("../Shifer", FileMode.OpenOrCreate);

bufmem.WriteTo(aaa);

bufmem.Flush();

cStream.Close();

cStream = null;

bufmem.Close();

bufmem = null;

aaa.Close();

aaa = null;

aFile = new FileStream("../Shifer", FileMode.Open, FileAccess.ReadWrite);

}

}

else if (uShif== 0)

{

aFile = new FileStream(aNameFile, FileMode.Open, FileAccess.Read);

}

sizeFile = aFile.Length+56;

check = 0;

razriad = 1;

//проверка на вместимость фала в контейнер

for (l = 0; l <= Riff.Count - 1; l++)

{

if (Riff[l].BitPerSample == 16)

check = check + Riff[l].sizeDATA / 16;

if (Riff[l].BitPerSample == 8)

check = check + Riff[l].sizeDATA / 8;

}

if (check < sizeFile*8)

{

MessageBox.Show("Размер открываемого файла больше чем размер файлов контейнеров!", "Информация", MessageBoxButtons.OK);

aFile.Close();

aFile = null;

File.Delete("../Shifer");

return;

}

k = 0;

i = 0;

deleg(1, sizeFile*8);

numlet = 0;

ind = 0;

while (i <= sizeFile*8)

{

for (l = 0; l<= Riff.Count - 1; l++)

{

if (k < Riff[l].sizeDATA)

{

//если размер бит в семпле 16

if (Riff[l].BitPerSample == 16)

{

checkbits(Riff[l].BitPerSample);

if (i <= 47)

{

karet = BitConverter.GetBytes(loadKaretkaSlovo());

Stego16(karet[0], k, l);

if (i == 47)

{

numlet = 0;

ind = 0;

razriad = 1;

}

}

if ((i > 47) && (i <= 111))

{

karet = BitConverter.GetBytes(loadKaretKey());

Stego16(karet[0], k, l);

}

else

if (i > 111)

{

karet = BitConverter.GetBytes(loadKaretFile());

Stego16(karet[0], k, l);

}

}

//если размер бит в семпле 8

if (Riff[l].BitPerSample == 8)

{

checkbits(Riff[l].BitPerSample);

if (i <= 47)

{

karet = BitConverter.GetBytes(loadKaretkaSlovo());

Stego8(karet[0], k, l);

if (i == 47)

{

numlet = 0;

ind = 0;

razriad = 1;

}

}

if ((i > 47) && (i <= 111))

{

karet = BitConverter.GetBytes(loadKaretKey());

Stego8(karet[0], k, l);

}

else

if (i > 111)

{

karet = BitConverter.GetBytes(loadKaretFile());

Stego8(karet[0], k, l);

}

}

i = i + 1;

deleg(2, i);

}

}

k = k + 1;

}

for (l = 0; l <= Riff.Count - 1; l++)

{

if (Riff[l].BitPerSample == 8)

{

if (saveitem == 1)

{

SaveFileDialog Dialog = new SaveFileDialog();

if (Dialog.ShowDialog() == DialogResult.OK)

{

Dialog.Filter = "wav file|*.wav";

FileStream newFile = new FileStream(Dialog.FileName, FileMode.Create);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerRIFF), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].sizeRIFF), 0, 4);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerWAVE), 0, 4);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerFMT), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].sizeFMT), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].FormatTag), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].Channels), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].SamplesPerSec), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].AvgBytesPerSec), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].BlockAlign), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].BitPerSample), 0, 2);

newFile.Write(Encoding.ASCII.GetBytes("data"), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].sizeDATA), 0, 4);

for (j = 0; j < Riff[l].sizeDATA; j++)

{

newFile.Write(BitConverter.GetBytes(Riff[l].DataChunk8[j]), 0, 1);

}

newFile.Close();

}

else

{

aFile.Close();

aFile = null;

File.Delete("../Shifer");

return;

}

}

if (saveitem == 0)

{

FileStream newFile = new FileStream(NameFiles[l], FileMode.Open);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerRIFF), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].sizeRIFF), 0, 4);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerWAVE), 0, 4);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerFMT), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].sizeFMT), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].FormatTag), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].Channels), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].SamplesPerSec), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].AvgBytesPerSec), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].BlockAlign), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].BitPerSample), 0, 2);

newFile.Write(Encoding.ASCII.GetBytes("data"), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].sizeDATA), 0, 4);

for (j = 0; j < Riff[l].sizeDATA; j++)

{

newFile.Write(BitConverter.GetBytes(Riff[l].DataChunk8[j]), 0, 1);

}

newFile.Close();

}

}

if (Riff[l].BitPerSample == 16)

{

if (saveitem == 1)

{

SaveFileDialog Dialog = new SaveFileDialog();

if (Dialog.ShowDialog() == DialogResult.OK)

{

Dialog.Filter = "wav file|*.wav";

FileStream newFile = new FileStream(Dialog.FileName, FileMode.Create);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerRIFF), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].sizeRIFF), 0, 4);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerWAVE), 0, 4);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerFMT), 0, 4);

newFile.Write(BitConverter.GetBytes((Int32)16), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].FormatTag), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].Channels), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].SamplesPerSec), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].AvgBytesPerSec), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].BlockAlign), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].BitPerSample), 0, 2);

newFile.Write(Encoding.ASCII.GetBytes("data"), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].sizeDATA), 0, 4);

for (j = 0; j < Riff[l].sizeDATA / 2; j++)

{

newFile.Write(BitConverter.GetBytes(Riff[l].DataChunk16[j]), 0, 2);

}

newFile.Close();

}

else

{

aFile.Close();

aFile = null;

File.Delete("../Shifer");

return;

}

}

if (saveitem == 0)

{

FileStream newFile = new FileStream(NameFiles[l], FileMode.Open);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerRIFF), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].sizeRIFF), 0, 4);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerWAVE), 0, 4);

newFile.Write(Encoding.ASCII.GetBytes(Riff[l].headerFMT), 0, 4);

newFile.Write(BitConverter.GetBytes((Int32)16), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].FormatTag), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].Channels), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].SamplesPerSec), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].AvgBytesPerSec), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].BlockAlign), 0, 2);

newFile.Write(BitConverter.GetBytes(Riff[l].BitPerSample), 0, 2);

newFile.Write(Encoding.ASCII.GetBytes("data"), 0, 4);

newFile.Write(BitConverter.GetBytes(Riff[l].sizeDATA), 0, 4);

for (j = 0; j < Riff[l].sizeDATA / 2; j++)

{

newFile.Write(BitConverter.GetBytes(Riff[l].DataChunk16[j]), 0, 2);

}

newFile.Close();

newFile.Dispose();

newFile = null;

}

}

}

aFile.Close();

aFile = null;

File.Delete("../Shifer");

}

 

Код процедуры извлечения фала:

 

public bool OpenStegoFile(int bt)

{

long i,k;

bool flag, tiptop;

sizeFile = 0;

chbit = bt;

int l;

l = 0;

numlet = 0;

ind = 0;

flag = false;

razriad = 1;

i = 0;

k = 0;

candrew = "";

tiptop = true;

//"манчестерский код"

while (i <= 47)

{

l = 0;

while (l <= Riff.Count - 1)

{

if (k < Riff[l].sizeDATA)

{

checkbits(Riff[l].BitPerSample);

if (Riff[l].BitPerSample == 16)

{

if (decodeslovo16(Riff[l].DataChunk16[k]) == true)

{

flag = true;

}

}

if (Riff[l].BitPerSample == 8)

{

if (decodeslovo8(Riff[l].DataChunk8[k]) == true)

{

flag = true;

}

}

i = i + 1;

}

l = l + 1;

if (i == 48)

{

break;

}

}

if (l == Riff.Count)

{

k = k + 1;

}

}

if (flag == false)

{

MessageBox.Show("Не верные файлы, либо неверно заданы настройки!", "Информация", MessageBoxButtons.OK);

tiptop = false;

return(tiptop);

}

//извлечение ключа

while (i <= 111)

{

if (l == Riff.Count)

l = 0;

while (l<=Riff.Count-1)

{

checkbits(Riff[l].BitPerSample);

if (k < Riff[l].sizeDATA)

{

if (Riff[l].BitPerSample == 16)

{

decodekey16(Riff[l].DataChunk16[k]);

}

if (Riff[l].BitPerSample == 8)

{

decodekey8(Riff[l].DataChunk8[k]);

}

i = i + 1;

}

l = l + 1;

if (i == 112)

{

break;

}

}

if (l == Riff.Count)

{

k = k + 1;

}

}

razriad = 1;

ind = 0;

numlet = 0;

i = 0;

byteFile = new byte[sizeFile];

while (i<sizeFile*8)

{

if (l == Riff.Count)

l = 0;

while (l <= Riff.Count - 1)

{

if (k < Riff[l].sizeDATA)

{

checkbits(Riff[l].BitPerSample);

if (Riff[l].BitPerSample == 16)

{

decode16(Riff[l].DataChunk16[k]);

}

if (Riff[l].BitPerSample == 8)

{

decode8(Riff[l].DataChunk8[k]);

}

i = i + 1;

}

l = l + 1;

if (i == sizeFile*8)

{

break;

}

}

if (l == Riff.Count)

{

k = k + 1;

}

}

return (tiptop);

}


Приложение Б

Исходный код программы расчета освещения

unit Unit4;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, Buttons;

type

TForm4 = class(TForm)

Label27: TLabel;

Label28: TLabel;

Label29: TLabel;

Label33: TLabel;

Label30: TLabel;

Label32: TLabel;

Label31: TLabel;

Label22: TLabel;

Label23: TLabel;

Label24: TLabel;

Label25: TLabel;

Label26: TLabel;

Label34: TLabel;

Label35: TLabel;

Label37: TLabel;

Label38: TLabel;

SpeedButton1: TSpeedButton;

Label2: TLabel;

Label3: TLabel;

Edit21: TEdit;

Edit22: TEdit;

Edit23: TEdit;

ComboBox5: TComboBox;

ComboBox4: TComboBox;

Edit24: TEdit;

Edit25: TEdit;

Edit26: TEdit;

Edit17: TEdit;

Edit18: TEdit;

Edit19: TEdit;

Edit20: TEdit;

StaticText4: TStaticText;

StaticText3: TStaticText;

Button2: TButton;

Label1: TLabel;

Label4: TLabel;

procedure Button2Click(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form4: TForm4;

mf: array[1..15] of integer = (2600, 3000, 3570, 3820, 4550, 4070, 4440, 5220, 8000, 100, 100, 2250, 2080, 4160, 3460);

mw: array[1..15] of integer = (40, 40, 65, 65, 65, 80, 80, 80, 150, 4, 4, 40, 40, 80, 80);

implementation

{$R *.dfm}

procedure TForm4.Button2Click(Sender: TObject);

var

s: double;

i: double;

h: double;

C: double;

n: double;

f: double;

w: double;

k: integer;

begin

s:= StrToFloat(Edit17.Text) * StrToFloat(Edit18.Text);

h:= StrToFloat(Edit19.Text) - StrToFloat(Edit20.Text);

i:= s / (StrToFloat(Edit17.Text) + StrToFloat(Edit18.Text)) / h;

C:= 0;

if(ComboBox5.ItemIndex = 0) then

while(1=1) do

begin

if(i <= 0.5) then begin C:= 0.17; break; end;

if(i <= 0.7) then begin C:= 0.25; break; end;

if(i <= 0.9) then begin C:= 0.29; break; end;

if(i <= 1.1) then begin C:= 0.31; break; end;

if(i <= 1.25) then begin C:= 0.33; break; end;

if(i <= 1.5) then begin C:= 0.34; break; end;

if(i <= 1.75) then begin C:= 0.36; break; end;

if(i <= 2.0) then begin C:= 0.37; break; end;

if(i <= 2.25) then begin C:= 0.39; break; end;

if(i <= 2.5) then begin C:= 0.39; break; end;

if(i <= 3.0) then begin C:= 0.41; break; end;

if(i <= 4.0) then begin C:= 0.42; break; end;

if(i <= 5.0) then begin C:= 0.43; break; end;

end;

if(ComboBox5.ItemIndex = 1) then

while(1=1) do

begin

if(i <= 0.5) then begin C:= 0.15; break; end;

if(i <= 0.7) then begin C:= 0.21; break; end;

if(i <= 0.9) then begin C:= 0.24; break; end;

if(i <= 1.1) then begin C:= 0.27; break; end;

if(i <= 1.25) then begin C:= 0.28; break; end;

if(i <= 1.5) then begin C:= 0.30; break; end;

if(i <= 1.75) then begin C:= 0.32; break; end;

if(i <= 2.5) then begin C:= 0.36; break; end;

if(i <= 3.0) then begin C:= 0.37; break; end;

if(i <= 4.0) then begin C:= 0.39; break; end;

if(i <= 5.0) then begin C:= 0.41; break; end;

end;

if(ComboBox5.ItemIndex = 2) then

while(1=1) do

begin

if(i <= 0.5) then begin C:= 0.23; break; end;

if(i <= 0.7) then begin C:= 0.30; break; end;

if(i <= 0.9) then begin C:= 0.33; break; end;

if(i <= 1.1) then begin C:= 0.36; break; end;

if(i <= 1.25) then begin C:= 0.38; break; end;

if(i <= 1.5) then begin C:= 0.40; break; end;

if(i <= 1.75) then begin C:= 0.41; break; end;

if(i <= 2.0) then begin C:= 0.43; break; end;

if(i <= 3.0) then begin C:= 0.47; break; end;

if(i <= 4.0) then begin C:= 0.50; break; end;

if(i <= 5.0) then begin C:= 0.52; break; end;

end;

if(ComboBox4.ItemIndex = 0) then

begin

f:=StrToFloat(Edit25.Text);

w:=StrToFloat(Edit24.Text);

end;

if(ComboBox4.ItemIndex <> 0) then

begin

f:=mf[ComboBox4.ItemIndex];

w:=mw[ComboBox4.ItemIndex];

end;

n:= (s * StrToFloat(Edit21.Text) * StrToFloat(Edit22.Text) * StrToFloat(Edit23.Text))/(C*f);

k:= round(n);

if(k < n) then inc(k);

StaticText3.Caption:= IntToStr(k);

if(StrToFloat(Edit26.Text) < 0) then Edit26.Text:='1';

Label38.Caption:= FloatToStr(k / StrToFloat(Edit26.Text));

StaticText4.Caption:= FloatToStr(k * w);

end;

procedure TForm4.SpeedButton1Click(Sender: TObject);

begin

close;

end;

 

end.


Приложение В

Тезисы доклада на научной конференции.

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

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

Слово «стеганография» имеет греческие корни и буквально означает «тайнопись». Стеганография ­ это искусство и наука о способах передачи (хранения) скрытой информации, при которых скрытый канал организуется на базе и внутри открытого канала с использованием особенностей восприятия информации, причем для этой цели могут использоваться такие приемы как:

− полное сокрытие факта существования скрытого канала связи;

− создание трудностей для обнаружения, извлечения или модификации передаваемых скрытых сообщений внутри открытых сообщений-контейнеров;

− маскировки скрытой информации в протоколе.

Стеганографическая система состоит из: сообщения, которое нужно спрятать; контейнера, в который встраивается сообщение; ключа для встраивания и стего алгоритма. При использовании стеганографии в компьютере, вы прячете сообщение в другом файле. Особенность компьютерной стеганографии в том, что надо выбрать файл, способный скрыть сообщение. Изображения, звуковые, или видео файлы идеальны по нескольким причинам:

− эти типы файлов уже сжаты алгоритмом. Например,.jpeg,.mp3,.mp4, и.wav форматы - всё это примеры алгоритмов сжатия;

− достаточно велики, что облегчает задачу, для нахождения участков, способных скрыть какой-либо текст;

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

В настоящее время методы компьютерной стеганографии развиваются по двум основным направлениям:

− методы, основанные на использовании специальных свойств компьютерных форматов;

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

В рамках второго направления при сокрытии информации в аудио файлах преобладают алгоритмы использующие:

− изменение амплитуды;

− изменение фазы;

− эхо-сигнал;

− LSB (замена наименьших значащих битов).

Алгоритм LSB широко применяется для сокрытия информации в файлах с расширением.wav. Опираясь на описанную в предыдущем пункте структуры wav – файла, необходимо отметить, что само сокрытие осуществляется в data chunk. Для наглядного представления рассмотрим пример.

Предположим, что количество байт в одном семпле составляет 8 байт, тогда амплитуда, закодированная в data chunk будет представлять следующую двоичную последовательность:

10100001-10101110-11010110-11001110-11000111-11001010-11010110-11101101…

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

Предположим, что в приведенный выше фрагмент двоичных чисел (контейнер) необходимо «запрятать» русскую букву «А», представленную с помощью кодовой таблицы CP-1251. Десятичное представление буквы «А» имеет вид 192D, а двоичное — 11000000B.

Модифицируя имеющийся блок двоичных чисел, поместим в контейнер двоичное число 11000000В. При этом 8 бит файла-сообщения записываются в 8 чисел файла-контейнера:

10100000-10101110-11010110-11001110-11000110-11001010-11010111-11101101

Таким образом, можно скрыть в аудиофайле любой другой файл, размер которого не будет превышать data chunk. Если применить методы шифрования к файлам, которые необходимо сокрыть, то такую информацию будет тяжело распознать.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: