Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Delphi Программно создание caption Подскажите пожалуйста сложно обьяснить но попробую когда нажать на кнопку в файле.тхт идет поиск слов если в слове есть .тхт тогда создаются checkboxи название их будет слово из файла их будет столько сколько слов в файл.тхт без // если в файле.тхт есть //слово.тхт тогда у название checkbox будет галочка отмечена и если нажать на кнопку сохранить тогда если галочка отмечена текст... https://www.cyberforum.ru/ delphi-beginners/ thread268114.html Delphi Полигон и Гистрограмму
Как построить Полигон и Гистрограмму...Если можно приведите пример
Delphi Путь к файлам Здравствуйте! =) Стоит компонент WebBrowser, путь к странице задается через ComboBox. Сами страницы(html) находятся в подкаталоге самой программы. Так вот, при переносе программы, путь к страницам соответственно меняется. Подскажите пожалуйста, как прописать пути к файлам, что бы программа их находила... https://www.cyberforum.ru/ delphi-beginners/ thread268084.html Delphi Переделать через обработку сообщений Windows. Доброго времени суток. Есть вот такой код программы: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; https://www.cyberforum.ru/ delphi-beginners/ thread268076.html
в TidAttachment ошибка Delphi
Здравствуйте! У меня Delphi 2009 в строке TidAttachment.Create(IdMessage1.MessageParts, 'C:/'); пишет, что не знает 'C:/' Почему так? всегда работало. Скажите пожалуйста
Delphi Хэширование https://www.cyberforum.ru/ delphi-beginners/ thread268051.html
Доброго времени. В универе по спо (системное программное обеспечение) дали лабораторную. Суть в следующем. Дан список идентификаторов(.txt файл). Нужно оргаизовать поиск по этому списку 2-мя методами: рехеширование с произведением и с помощью простого списка ( кому интересно учебник Молчанова, Лабораторный практикум). Вот мой код: unit Unit1; const hash_min=Ord('0')+Ord('0')+Ord('0');...
Delphi Word Какой текстовый компонент может различать Word (OleVariant) ? В каком-то исходнике видел mmMain, но я его не нашёл в своём Delphi.... https://www.cyberforum.ru/ delphi-beginners/ thread268034.html Delphi Aлгоритм управления памятью «Быстрый подходящий» (с 3 списками).
Помогите пожалуйста!!! нужно написать код выделения памяти для варианта с тремя списками код освобождения памяти для варианта с тремя списками процедурa дефрагментации для варианта с быстрым подходящим изменить прогу на Delphi Вся теория что у меня есть: алгоритм распределения называется «быстрый подходящий», он поддерживает отдельные списки для некоторых из наиболее часто запрашиваемых...
Delphi Ввести список целых чисел,предусмотреть проверку правильности ввода,отсортировать по убыванию. Помогите написать программу. нужно Ввести список целых чисел. Предусмотреть проверку правильности ввода (при вводе символа выдавать сообщение о необходимости повторного ввода). Отсортировать введенные значения по убыванию и показать их. https://www.cyberforum.ru/ delphi-beginners/ thread267958.html Delphi Ввести список целых чисел,предусмотреть проверку правильности ввода,отсортировать по убыванию. Помогите с написанием программы. нужно Ввести список целых чисел. Предусмотреть проверку правильности ввода (при вводе символа выдавать сообщение о необходимости повторного ввода). Отсортировать введенные значения по убыванию и показать их. https://www.cyberforum.ru/ delphi-beginners/ thread267930.html
Delphi Выяснить, совподают ли строки.
Привет всем! Передо мной задача:Выяснить совподают ли строки. Если нет, то получить номер первой строки с отличием. Первую половину я сделал :) это загрузил текст в мемо и сравнил их. если совподает, то сообщение "совподает" осталось другая чать, которая вызвала у меня затруднение и я надеюсь на вашу помощь! var Form1: TForm1; txtf:textfile; a:string; b:string;
Delphi Использование переключателей, списков, полос прокрутки для управления пользовательским вводом https://www.cyberforum.ru/ delphi-beginners/ thread267911.html
Помогите пожалуйста с прогой. Ввести список строк. При щелчке на элементе списка необходимо выводить порядковый номер элемента в списке и заносить его во второй компонент TListBox. Заранее благодарна)
587 / 101 / 2
Регистрация: 08.02.2011
Сообщений: 842
05.04.2012, 17:10 0

Стеганография - Delphi - Ответ 2871218

05.04.2012, 17:10. Показов 88082. Ответов 70
Метки (Все метки)

Ответ

S9, у меня есть готовый вариант по jpeg и bmp, просто программу надо переделать чтоб она пряталала текстовый файл в другие форматы. Мне нужно ее переделать под PNG, CUR, Ico

Добавлено через 10 часов 0 минут
это unit Steganos; производит вроде шифрование
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
unit Steganos;
 
interface
 
uses Classes, Windows, Dialogs, SysUtils, Forms, JPEG, Graphics;
 
type
  TImageFileInfo=record
    FileN:String; //Èìÿ bmp’øêè
    width:dword; //øèðèíà ðèñóíêà
    height:dword; //âûñîòà ðèñóíêà
    smeshenie:dword; //Ñìåùåíèå ðèñóíêà îò íà÷àëà ôàéëà
    FileSize:dword; //Ðàçìåð bmp’øêè
    ImageSize:dword; //Ðàçìåð ðèñóíêà
    InfoHide:dword; //Ñêîëüêî èíôû ìîæíî ñïðÿòàòü
    RLE:byte; //Óðîâåíü ñæàòèÿ - äîëæåí áûòü ðàâåí 0
    BitsPerPixel:byte; //Ðàçðÿäíîñòü ðèñóíêà (áèò íà ïèêñåëü) - íàì íóæíû 24-õ ðàçðÿäíûå
    Signature:string[2]; //Ïåðâûå äâà áàéòà ôàéëà - bmp-ôàéëîâ äîëæíû áûòü 'BM'
end;
 
BitsArray=array[0..7] of byte;
 
 
  function FileType(FileN:string):string;
  procedure ConvertJPG2BMP(JPGName, BMPName:string);
  procedure GetFileFormat(FileN:string;var StrLst:TStringList;var ImageInfo:TImageFileInfo);
  procedure IHide(ImageInfo:TImageFileInfo; DFile:string; SaveDialog:TSaveDialog; cb:byte);
  procedure IExtract(IFile:string;SaveDialog:TSaveDialog; cb:byte);
 
implementation
 
 
function FileType(FileN:string):string;
var st:TMemoryStream;
    str:string[3];
    i:integer;
begin
  st:=TMemoryStream.Create;
  st.LoadFromFile(FileN);
 
  str:='   ';
  for i:=1 to 3 do
  st.ReadBuffer(str[i], sizeof(str[i]));
 
  if copy(str, 1,2) = 'BM'
    then Result:='BMP'
  else if str = 'ÿØÿ'
    then Result:='JPG'
  else Result:='???';
 
  st.Free;
end;
 
 
procedure ConvertJPG2BMP(JPGName, BMPName:string);
var
 jpg:TJPEGImage;
 bmp:TBitmap;
begin
   try
    jpg:=TJPEGImage.Create;
    bmp:=TBitmap.Create;
    jpg.CompressionQuality:=100;
    jpg.Compress;
    jpg.LoadFromFile(JPGName);
    bmp.Assign(jpg);
    bmp.SaveToFile(BMPName);
    FreeAndNil(jpg);
    FreeAndNil(bmp);
   except
    on e:Exception do
     begin
      FreeAndNil(jpg);
      FreeAndNil(bmp);
     end;
   end;
end;
 
 
 
procedure GetFileFormat(FileN:string;var StrLst:TStringList;var ImageInfo:TImageFileInfo);
var
  Stream:TMemoryStream;
  ch:char;
  size,dwrd:dword;
  wrd:word;
//  bt:byte;
  str:string;
begin
  StrLst:=TStringList.Create;
  stream:=TMemoryStream.Create;
 
  stream.LoadFromFile(FileN); //Çàãðóæàåì bmp’øêó â òîëüêî ÷òî ñîçäàííûé MemoryStream
 
  StrLst.Add(' ***Òåõíè÷åñêàÿ èíôîðìàöèÿ î ôàéëå*** ');
  StrLst.Add(' ***Ôàéë èçîáðàæåíèÿ: '+FileN+'***');
 
  stream.Read(ch,sizeof(ch)); //×èòàåì ñèãíàòóðó
  str:=ch;
  stream.Read(ch,sizeof(ch));
  str:=str+ch;
  StrLst.Add(' ***********');
  ImageInfo.Signature:=str; //Çàíåñåì â çàïèñü ñèãíàòóðó
 
 if ImageInfo.Signature ='BM' then //Åñëè ñèãíàòóðà = ‘BM’, òî çíà÷èò âñå íîðìàëüíî - ïðîäîëæàåì
    begin
      ImageInfo.FileN:=ExpandFileName(FileN); //Çàíåñåì â çàïèñü èìÿ bmp’øêè
 
      stream.Read(dwrd,sizeof(dwrd)); //Ñ÷èòàåì èç çàãîëîâêà ðàçìåð ôàéëà
      ImageInfo.Filesize:=dwrd;
 
      size:=round(dwrd/1024); //Ïåðåâåäåì â êèëîáàéòû äëÿ äàëüíåéøåãî âûâîäà â îïèñàíèå
      StrLst.add('Ðàçìåð ôàéëà ñ èçîáðàæåíèåì: '+IntToStr(dwrd)+' ( '+InTToStr(size)+' kb)');
 
      stream.Read(dwrd,sizeof(dwrd)); //Çàðåçåðâèðîâàíî - íå èñïîëüçóåòñÿ
      stream.Read(dwrd,sizeof(dwrd)); //Çàðåçåðâèðîâàíî - íå èñïîëüçóåòñÿ
 
      ImageInfo.smeshenie:=dwrd; //Åñëè ÷òî-òî äàëåå íå ÿñíî - ñìîòðè îïèñàíèå ôîðìàòà
      StrLst.Add('Ñìåùåíèå äàííûõ áèòîâîãî îáðàçà îò çàãîëîâêà: '+IntToStr(dwrd)+' áàéò');
 
      stream.Read(dwrd,sizeof(dwrd));
      StrLst.Add('Ðàçìåð BITMAPINFOHEADER: '+IntToStr(dwrd)+' áàéò');
 
      stream.Read(dwrd,sizeof(dwrd));
      ImageInfo.width:=dwrd;
      StrLst.Add('Øèðèíà èçîáðàæåíèÿ: '+IntToStr(dwrd)+' ïèêñåëåé');
 
      stream.Read(dwrd,sizeof(dwrd));
      ImageInfo.height:=dwrd;
      StrLst.Add('Âûñîòà èçîáðàæåíèÿ: '+IntToStr(dwrd)+' ïèêñåëåé');
 
      stream.Read(wrd,sizeof(wrd));
      StrLst.Add('×èñëî áèòîâûõ ïëîñêîñòåé óñòðîéñòâà: '+IntToStr(wrd));
 
      stream.Read(wrd,sizeof(wrd));
      ImageInfo.BitsPerPixel:=wrd;
      StrLst.Add('Ãëóáèíà èçîáðàæåíèÿ (÷èñëî áèòîâ íà ïèêñåëü): '+IntToStr(wrd));
 
      stream.Read(dwrd,sizeof(dwrd));
      StrLst.Add('Òèï ñæàòèÿ (0-îòñóòñòâóåò): '+IntToStr(dwrd));
      ImageInfo.RLE:=dwrd;
 
      stream.Read(dwrd,sizeof(dwrd));
      size:=round(dwrd/(1024));
      StrLst.Add('Ðàçìåð êàðòèíêè â áàéòàõ: '+IntToStr(dwrd)+' ( '+IntToStr(size)+' kb)');
 
      ImageInfo.ImageSize:=dwrd;
      stream.Read(dwrd,sizeof(dwrd));
      StrLst.Add('Ãîðèçîíòàëüíîå ðàçðåøåíèå óñòðîéñòâà (ïèêñåëü/ì): '+IntToStr(dwrd));
 
      stream.Read(dwrd,sizeof(dwrd));
      StrLst.Add('Âåðòèêàëüíîå ðàçðåøåíèå óñòðîéñòâà (ïèêñåëü/ì): '+IntToStr(dwrd));
 
      stream.Read(dwrd,sizeof(dwrd));
      StrLst.Add('×èñëî èñïîëüçóåìûõ öâåòîâ: '+IntToStr(dwrd));
 
      stream.Read(dwrd,sizeof(dwrd));
      StrLst.Add('×èñëî âàæíûõ öâåòîâ: '+IntToStr(dwrd));
 
      ImageInfo.InfoHide:=(ImageInfo.width*ImageInfo.height*3) div 8;
      StrLst.Add(' ***********');
      StrLst.Add('Ìîæíî ñïðÿòàòü èíôîðìàöèè '+IntToStr(ImageInfo.infohide)+'áàéò ('+IntToStr(round((ImageInfo.infohide)/1024))+'kb)');
end
else StrLst.Add('Îøèáêà: ýòî íå ôàéë ôîðìàòà Windows 3.11 BMP.');
stream.Free;
end;
 
 
procedure HexToBin(x:byte;var a:BitsArray);
var
  bit,i:byte;
begin
  for i:=7 downto 0 do
  begin
    if (X and (1 shl i))<>0
      then bit:=1
      else bit:=0;
    a[i]:=bit;
  end;
end;
 
 
procedure BinToHex(var x:byte;a:BitsArray);
var i:dword;
    bit,t:byte;
begin
  x:=0;
  for i:=7 downto 0 do
    begin
      bit:=a[i];
      x:=x or bit;
      if i<>0
        then x:=x shl 1;
    end;
end;
 
 
function SetBit(SByte: byte; num: byte): byte;
begin
  Result := SByte or (1 shl num);
end;
 
 
function ResetBit(SByte: byte; num: byte): byte;
begin
  Result := SByte and not (1 shl num);
end;
 
 
procedure IHide(ImageInfo:TImageFileInfo; DFile:string; SaveDialog:TSaveDialog; cb:byte);
var
  sz,n,z:dword;
  len,v,i,xi,xd:byte;
  FIStream,FDStream:TMemoryStream;
  BAr,BArLog:BitsArray;
  tmp,FName:string;
  f:File;
  filesize:longint;
begin
  //Â FDStream ïîäãðóæàåòñÿ ôàéë äàííûõ, à â FIStream ôàéë-êîíòåéíåð
  FDStream:=TMemoryStream.Create;
  FDStream.LoadFromFile(DFile);
  FIStream:=TMemoryStream.Create;
 
  //Òóò èäóò ðàçëè÷íûå ïðîâåðêè íà òî ïîäõîäèò ýòîò ôàéë íà ðîëü êîíòåéíåðà èëè íåò
  if ImageInfo.Signature<>'BM' then
  begin
    MessageBox(Application.handle,'Ýòî íå èçîáðàæåíèå ôîðìàòà Windows Bitmap.','Error',MB_ICONERROR);
    exit;
  end;
 
  if ImageInfo.BitsPerPixel<>24 then
  begin
    MessageBox(Application.handle,'Èçîáðàæåíèå äîëæíî áûòü 24-õ áèòíûì!','Error',MB_ICONERROR);
    exit;
  end;
 
  if ImageInfo.RLE<>0 then
  begin
    MessageBox(Application.handle,'Â äàííîì èçîáðàæåíèè èñïîëüçóåòñÿ ñæàòèå.','Error',MB_ICONERROR);
    exit;
  end;
 
  if (ImageInfo.InfoHide < FDStream.Size) then
  begin
    MessageBox(Application.handle,'Ýòî èçîáðàæåíèå ñëèøêîì ìàëî, ÷òîá ïîìåñòèòü â ñåáÿ ñòîëüêî èíôîðìàöèè.','Error',MB_ICONERROR);
    exit;
  end;
 
  //Åñëè ôàéë ïðîøåë âñå ïðîâåðêè - ïîäãðóæàåì åãî â ïàìÿòü
  FIStream.LoadFromFile(ImageInfo.FileN);
  FIStream.Position:=ImageInfo.smeshenie;
  //Ðàçìåð ôàéëà äàííûõ ïîìåùàåì â sz
  sz:=FDStream.size;
 
  //Çàïèñûâàåì ðàçìåð ôàéëà êîòîðûé ïðÿ÷åì â bmp’øêó
  for n:=31 downto 0 do
  begin
    //×èòàåì áàéò èç ôàéëà-êîíòåéíåðà
    FIStream.Read(xi,sizeof(xi));
    //Åñëè â sz’å áèò ñ íîìåðîì n ðàâåí 1, òî óñòàíàâëèâàåì 0-îé áèò â òîëüêî ÷òî ñ÷èòàíîì
    //áàéòå, íó à åñëè n’íûé áèò ñáðîøåí, òî ñáðàñûâàåì 0-îé áèò…
    if (sz and (1 shl n))<>0
      then xi:=SetBit(xi,cb)
      else xi:=ResetBit(xi,cb);
    //Îòêàòûâàåìñÿ íà ïîçèöèþ íàçàä, ÷òîá ïåðåçàïèñàòü òîò áèò êîòîðûé ìû ñ÷èòàëè, íî
    //òîëüêî òåïåðü ñ èçìåíåííûì íóëåâûì áèòîì
    FIStream.Position:=FIStream.Position-1;
    FIStream.Write(xi,sizeof(xi));
  end;
 
  //Ïîëó÷àåì èìÿ ôàéëà äàííûõ áåç ïóòè ê ôàéëó
  tmp:=ExtractFileName(DFile);
  //Ïîëó÷àåì äëèííó èìåíè
  len:=Length(tmp);
  //Ðàçáèâàåì áàéò â êîòîðîì õðàíèòñÿ äëèííà èìåíè íà ìàññèâ 1 è 0
  HexToBin(len,BAr);
 
  //Çàïèñûâàåì äëèííó èìåíè â ôàéë-êîíòåéíåð
  for n:=7 downto 0 do
  begin
    FIStream.Read(xi,sizeof(xi));
    if BAr[n]=1 then xi:=SetBit(xi,cb);
    if BAr[n]=0 then xi:=ResetBit(xi,cb);
    FIStream.Position:=FIStream.Position-1;
    FIStream.Write(xi,sizeof(xi));
  end;
 
  //Çàïèñûâàåì ñàìî èìÿ ôàéëà â bmp’øêó
  for n:=1 to len do
  begin
    //Áåðåì ñèìâîë ñ íîìåðîì n, ïîëó÷àåì åãî ascii-êîä, ðàçáèâàåì ïîëó÷åííîå íà áèòû è //çàïèñûâàåì
    v:=ord(tmp[n]);
    HexToBin(v,BAr);
    for i:=7 downto 0 do
    begin
      FIStream.Read(xi,sizeof(xi));
      if BAr[i]=1 then xi:=SetBit(xi,cb);
      if BAr[i]=0 then xi:=ResetBit(xi,cb);
      FIStream.Position:=FIStream.Position-1;
      FIStream.Write(xi,sizeof(xi));
    end;
  end;
 
  //Ïèøåì â bmp’øêó ñàìî òåëî ôàéëà
  //êàæäûé áàéò ðàçáèâàåì íà áèòû è çàïèñûâàåì
  for n:=0 to (sz-1) do
  begin
    FDStream.Read(xd,sizeof(xd));
    HexToBin(xd,BAr);
    for i:=7 downto 0 do
    begin
      FIStream.Read(xi,sizeof(xi));
      if BAr[i]=1 then xi:=SetBit(xi,cb);
      if BAr[i]=0 then xi:=ResetBit(xi,cb);
      FIStream.Position:=FIStream.Position-1;
      FIStream.Write(xi,sizeof(xi));
    end;
  end;
  SetLength(FName,0);
  //Âûçûâàåì.. íåò, íå äóõîâ, à äèàëîã ñîõðàíåíèÿ ôàéëîâ
  if SaveDialog.Execute then FName:=SaveDialog.FileName;
  if LowerCase(ExtractFileExt(FName))<>'.bmp' then FName:=FName + '.bmp';
  //Ñîõðàíÿåì
  FIStream.SaveToFile(FName);
  //Îñâîáîæäàåì ïåðåìåííûå
  FDStream.Free;
  FIStream.Free;
  ShowMessage('Âûïîëíåíî!');
end;
 
 
procedure IExtract(IFile:string;SaveDialog:TSaveDialog; cb:byte);
var
  IInfo:TImageFileInfo;
  Lst:TStringList;
  IFstream,DFStream:TMemoryStream;
  n,i,sz:dword;
  a:BitsArray;
  b:array[0..31] of byte;
  bit,len,x,z:byte;
  DFile:string;
begin
  Lst:=TStringList.Create;
 
  //Ïîëó÷àåì èíôó èç bmp’øêè
  GetFileFormat(IFile,Lst,IInfo);
 
  //Ãðóçèì âñå â ïàìÿòü
  IFstream:=TMemoryStream.Create;
  DFStream:=TMemoryStream.Create;
 
  IFstream.LoadFromFile(IFile);
  IFstream.Position:=IInfo.smeshenie;
 
//Ñîáèðàåì ìàññèâ èç 1 è 0, êîòîðûé åñòü ðàçìåð ñïðÿòàííîãî ôàéëà
  for n:=31 downto 0 do
  begin
    IFstream.Read(z,sizeof(z));
    if (z and (1 shl cb))<>0 then z:=1 else z:=0;
    b[n]:=z;
  end;
  sz:=0;
 
  //Ñîáèðàåì dword ïî áèòàì èç ìàññèâà ïîëó÷åííãî âûøå
  for i:=31 downto 0 do
  begin
    bit:=b[i];
    sz:=sz or bit;
    if i<>0 then sz:=sz shl 1;
  end;
 
  SetLength(DFile,0);
  DFIle:='';
  z:=0;
 
  //Ïîëó÷àåì èç ôàéëà-êîíòåéíåðà äëèííó èìåíè
  for n:=7 downto 0 do
  begin
    IFstream.Read(z,sizeof(z));
    if (z and (1 shl cb))<>0 then z:=1 else z:=0;
    a[n]:=z;
  end;
  len:=0;
 
  //Ìàññèâ 1 è 0->áàéò
  BinToHex(len,a);
 
  //Ïîëó÷àåì èìÿ ñïðÿòàííîãî ôàéëà
  for n:=1 to len do
  begin
    for i:=7 downto 0 do
    begin
      IFstream.Read(z,sizeof(z)); // Error!
      if (z and (1 shl cb))<>0 then z:=1 else z:=0;
      a[i]:=z;
    end;
    BinToHex(z,a);
    DFile:=Dfile+chr(z);
  end;
 
  //Äîñòàåì ñàìî òåëî ôàéëà
  for i:=0 to sz-1 do
  begin
    //Ñ÷èòûâàåì 8 áèò
    for n:=7 downto 0 do
    begin
      IFstream.Read(z,sizeof(z));
      if (z and (1 shl cb))<>0 then z:=1 else z:=0;
      a[n]:=z;
    end;
    //Ñîáèðàåì èç ýòèõ áèò áàéò
    BinToHex(x,a);
    //Äîïèñûâàåì áàéò ê òîìó ÷òî åñòü â ïàìÿòè - ñîáèðàåì ôàéë
    DFStream.Write(x,sizeof(x));
  end;
 
  try
    //Ïðåäëîæèì äëÿ ñîõðàíåíèÿ ôàéëà èìÿ, ïîä êîòîðûì îí áûë óïàêîâàí.
    SaveDialog.FileName:=DFile;
    //Âûçûâàåì äèàëîã ñîõðàíåíèÿ
    if SaveDialog.Execute then DFile:=SaveDialog.FileName;
 
    //Ñîõðàíÿåì èçâëå÷åííûé ôàéë
    DFStream.SaveToFile(DFile);
  except
    MessageBox(0,PAnsiChar('Îøèáêà ïðè ïîïûòêå ñîõðàíåíèÿ.'+#13#10+DFile),'X-Date',MB_ICONERROR);
  end;
 
  IFstream.Free;
  DFStream.Free;
  Lst.Free;
  MessageBox(0,'Âûïîëíåíî!','X-Data',MB_ICONINFORMATION);
end;
 
 
end.
это сама наша готовая программа она прячет текстовый документ в картинку и обратно не знаю как переделать данную программу чтоб она прятала информацию в PNG, djvu, ico форматы(КТо знает пожалуйста помогите)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtDlgs, ComCtrls, XPMan, ExtCtrls, CheckLst;
 
type
  TForm1 = class(TForm)
    SaveDialog1: TSaveDialog;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    OpenDialog1: TOpenDialog;
    Image1: TImage;
    RadioGroup1: TRadioGroup;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
uses Steganos;
 
var
  IInfo:TImageFileInfo;
  DFile:string;
 
{$R *.dfm}
 
 
procedure TForm1.Button1Click(Sender: TObject);
var i:byte;
    Strgs:TStringList;
    ft:string;
begin
  OpenDialog1.Filter:='*.jpg; *.bmp|*.jpg; *.bmp';
  if OpenDialog1.Execute then
  begin
    ft:=FileType(OpenDialog1.FileName);
    if ft = 'BMP'
    //Åñëè BMP - îïðåäåëÿåì åãî ïîêàçàòåëè
        then
        begin
          GetFileFormat(OpenDialog1.FileName,Strgs,IInfo);
          Image1.Picture.Bitmap.LoadFromFile(OpenDialog1.FileName);
        end
      else if ft = 'JPG'
    //Åñëè JPG - êîíâåðòèðóåì âî âðåìåííûé ôàéë
    //è îïðåäåëÿåì ïîêàçàòåëè âðåìåííîãî ôàéëà
        then begin
          ConvertJPG2BMP(OpenDialog1.FileName, 'tmpfile');
          Image1.Picture.Bitmap.LoadFromFile('tmpfile');
          GetFileFormat('tmpfile',Strgs,IInfo);
        end
      else exit;
 
  end
    else exit;
  
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
OpenDialog1.Filter:='*.txt|*.txt';
if OpenDialog1.Execute then
  begin
  DFile:=OpenDialog1.FileName;
  Memo2.Lines.LoadFromFile(DFile);
  end;
end;
 
 
procedure TForm1.Button3Click(Sender: TObject);
var ft:string;
begin
  if DFile<>''
    then
    begin
      ft:=FileType(IInfo.FileN);
      if ft = 'BMP'
      //Åñëè BMP - âûçûâàåì ïðîöåäóðó ñêðûòèÿ äëÿ èñõîäíîãî èìåíè ôàéëà
        then IHide(IInfo,Dfile,SaveDialog1,RadioGroup1.itemindex)
      else if ft = 'JPG'
      //Åñëè JPG, òî âûçûâàåì ïðîöåäóðó ñêðûòèÿ äëÿ èìåíè âðåìåííîãî ôàéëà
      //è óäàëÿåì ýòîò âðåìåííûé ôàéë
        then begin
          IHide(IInfo, DFile, SaveDialog1, RadioGroup1.itemindex);
          DeleteFile('tmpfile');
        end;
    end
    else MessageBox(handle,'Íå âûáðàí ôàéë äàííûõ!!!','XData Error',MB_ICONERROR);
end;
 
 
procedure TForm1.Button4Click(Sender: TObject);
begin
  OpenDialog1.Filter:='*.bmp|*.bmp';
  if OpenDialog1.Execute
    then IExtract(OpenDialog1.FileName,SaveDialog1,RadioGroup1.itemindex);
end;
 
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if FileExists('tmpfile') then DeleteFile('tmpfile');
end;
 
end.
Добавлено через 40 секунд
сам я в дельфи плохо разбираюсь)
S9, МОжете ее переделать под PNG, djvu, ico и т.д. (КРоме BMP, Jpeg, tiff, GIF,AVI, MP3) ?

Вернуться к обсуждению:
Стеганография Delphi
2
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2012, 17:10
Готовые ответы и решения:

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

Стеганография
Доброй ночи! У меня большая проблема. Я не могу найти ошибку в программе. Она вместо удваивания...

Стеганография.Шифрование текста в картинку
Задали курсовую Стеганография, нужно чтобы текст шифровался в картинку jpeg. Помогите пожалуйста....

Стеганография LSB BMP
Такой вопрос: мне нужно из едита побитно запихнуть в байты цвета файла-контейнера биты текста. Есть...

70
05.04.2012, 17:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2012, 17:10
Помогаю со студенческими работами здесь

Стеганография
Всем доброго времени суток, дали задание зашифровать в изображении текст, т.к. времени у меня не...

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

стеганография
дали изображение, сказали пароль 0x48k, что бы это значило? Попытался дешифровать, введя тупо ...

Стеганография
Здравствуйте,подскажите пожалуйста! Я написал программу которая шифрует пробелами секретную...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru