Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.30;
Скачать: CL | DM;

Вниз

Файлы   Найти похожие ветки 

 
Steep ©   (2007-09-03 13:25) [0]

Каким образом записывают иформацию в файл?
т.е. например мне нужно записать картинку и допустим + какой-то текстовый файл вместе - как картинку - чтобы стандартный просмотрщик видел картинку, а моя прогамма и текст?

Примерно как теги в mp3..

Я в этом в этом вопросе полный ноль... - любому материалу буду рад


 
shlst   (2007-09-03 13:27) [1]

как как, секретно:
Если цвет точки  +-1 это не заметно - например 233 и 234 - на глаз не заметишь, а твоя программа может это использовать - восемь точек и вот тебе байт, можешь туда букву записать.


 
palva ©   (2007-09-03 13:31) [2]

Зависит от формата картинки.
Если секретность не требуется, то в jpg файл можно записать любой текст в качестве комментария.


 
@!!ex ©   (2007-09-03 13:35) [3]

вариант описанный в [1] - известный способ хранения информации, и практически не реально расшифровать.
вариант описанный в [2] - известный способ храенния информации. есть куча форматов файлов поддерживающих текст внутри себя.


 
Anatoly Podgoretsky ©   (2007-09-03 13:42) [4]


> palva ©   (03.09.07 13:31) [2]

Комментарий можно записать в любой файл.


 
Ega23 ©   (2007-09-03 13:44) [5]

читай про спецификацию Tag Image File Format.
Хоть видео туда можно запихнуть.


 
Steep ©   (2007-09-03 14:20) [6]

Спасибо за инфу!

> Если цвет точки  +-1 это не заметно - например 233 и 234
> - на глаз не заметишь, а твоя программа может это использовать
> - восемь точек и вот тебе байт, можешь туда букву записать.

хм. интересно - а как это осуществить? где можно глянуть кусок кода записи?

> Если секретность не требуется, то в jpg файл можно записать
> любой текст в качестве комментария.


И здесь тоже вопрос как его записать?


> читай про спецификацию Tag Image File Format.

Ну пока единственное что я там нашел - это как кодируется изображение различными преобразованиями и конечным сжатием хаффмана.
А как записывать то....

Ну картинку я привел так для примера я имею ввиду как дописать файл какой-то свой инфой которую никто не увидит (секретность пока не обязательна)
т.е. текстовый файл дописать просто: открыл, посмотрел где конец, дописал
а в не текстовом как?


 
Ega23 ©   (2007-09-03 14:23) [7]


> А как записывать то....


читай внимательно, каким образом tiff устроен внутри.


 
Steep ©   (2007-09-03 14:58) [8]

Вопрос не в том как устроен файл - а как записать инфу зная как он устроен...
Я не понимаю как именно происходит запись :(


 
@!!ex ©   (2007-09-03 15:00) [9]

> [8] Steep ©   (03.09.07 14:58)

WriteBlock? :)))


 
TUser ©   (2007-09-03 15:00) [10]

Посмори на слово "стеганография" в гугле


 
@!!ex ©   (2007-09-03 15:02) [11]

Самый простой способ - кодировать BitMap.
Если надо, простенький примерчик могу дать.


 
Инс ©   (2007-09-03 15:04) [12]


> [8] Steep ©   (03.09.07 14:58)

Поискать инфу по классу TFileStream в справке.


 
tesseract ©   (2007-09-03 15:05) [13]


> а как записать инфу зная как он устроен...Я не понимаю как
> именно происходит запись :(


ReadFile/WriteFile ? Молодец завёл весь форум в ступор.


 
Ricko ©   (2007-09-03 15:07) [14]

Вот здесь посмотри мою попытку реализовать стеганографию для bmp на KOL: http://kolmck.net/Components/crypto/Stega10.zip


 
@!!ex ©   (2007-09-03 15:57) [15]

Вот мой модуль для кодирования в BitMap.
Единственное, размер буффера - фиксированный, но это не проблема. моэно и размер буффера хранить в первых значениях битмапа.

unit BitMapCodec;

interface
uses Graphics, SysUtils;
const
 ID_ERROR_NO               = 0;
 ID_ERROR_FILE_NOF_FOUND   = 1;
 ID_ERROR_BITMAP_TOO_SMALL = 2;
 ID_ERROR_BITMAP_NOT_24BPP = 3;
 ID_ERROR_UNKNOWN          = 4;

Function   SetDataToBitMap(const FileName:string; Data:PByteArray; Size:integer):integer;
Function   GetDataFromBitMap(const FileName:string; var Data:PByteArray; var Size:integer):integer;

implementation

Function CodeByte(Data,Value,Bit:byte):byte;
begin
 Result:=Data;
  if (Value and (1 shl Bit)) = 0 then begin
    if Data mod 2 <> 0 then begin
      if Data<>255 then
        Result:=Data+1
      else
        Result:=254;
    end;
  end
  else begin
    if Data mod 2 = 0  then begin
      if Data<>0 then
        Result:=Data-1
      else
        Result:=1;
    end;
  end;
end;

Function DecodeByte(Data,Value,Bit:byte):byte;
begin
 Result:=Value;
 if Data mod 2 = 0 then begin
   Result := Value and not (1 shl Bit);
 end
 else
   Result:= Value or (1 shl Bit);
end;

Function   SetDataToBitMap(const FileName:string; Data:PByteArray; Size:integer):integer;
var
 BitMap:TBitMap;
 Scan:PByteArray;
 CursorPosition:integer;
 Bit:byte;
 x,y:integer;
begin
 Result:=ID_ERROR_UNKNOWN;
 if FileExists(FileName) then begin
   BitMap:=TBitMap.Create;
   BitMap.LoadFromFile(FileName);
   if BitMap.PixelFormat=pf24bit then begin
     if (BitMap.Height*BitMap.Width*3 div 8)-3>=Size then begin
       CursorPosition:=0;
       Bit:=0;
       y:=0;
       while (y<BitMap.Width) and (CursorPosition<Size) do begin
         x:=0;
         Scan:=BitMap.ScanLine[y];
         while (x<BitMap.Height*3) and (CursorPosition<Size) do begin
           Scan[x]:=CodeByte(Scan[x],Data[CursorPosition],Bit);
           inc(Bit);
           if Bit=8 then begin
             inc(CursorPosition);
             Bit:=0;
           end;
           inc(x);
         end;
         inc(y);
       end;
       BitMap.SaveToFile(FileName);
       Result:=ID_ERROR_NO;
     end
     else
       Result:=ID_ERROR_BITMAP_TOO_SMALL;
   end
   else
     Result:=ID_ERROR_BITMAP_NOT_24BPP;
   BitMap.Free;
 end
 else
   Result:=ID_ERROR_FILE_NOF_FOUND;
end;

Function   GetDataFromBitMap(const FileName:string; var Data:PByteArray; var Size:integer):integer;
var
 BitMap:TBitMap;
 Scan:PByteArray;
 CursorPosition:integer;
 Bit:byte;
 x,y:integer;
begin
 Result:=ID_ERROR_UNKNOWN;
 if FileExists(FileName) then begin
   BitMap:=TBitMap.Create;
   BitMap.LoadFromFile(FileName);
   if BitMap.PixelFormat=pf24bit then begin
     if (BitMap.Height*BitMap.Width*3 div 8)-3>=Size then begin
       CursorPosition:=0;
       Bit:=0;
       y:=0;
       while (y<BitMap.Width) and (CursorPosition<Size) do begin
         x:=0;
         Scan:=BitMap.ScanLine[y];
         while (x<BitMap.Height*3) and (CursorPosition<Size) do begin
           Data[CursorPosition]:=DecodeByte(Scan[X],Data[CursorPosition],Bit);
           inc(Bit);
           if Bit=8 then begin
             inc(CursorPosition);
             Bit:=0;
           end;
           inc(x);
         end;
         inc(y);
       end;
       Result:=ID_ERROR_NO;
     end
     else
       Result:=ID_ERROR_BITMAP_TOO_SMALL;
   end
   else
     Result:=ID_ERROR_BITMAP_NOT_24BPP;
   BitMap.Free;
 end
 else
   Result:=ID_ERROR_FILE_NOF_FOUND;
end;

end.


 
@!!ex ©   (2007-09-03 16:00) [16]

Сам алгоритм кодирования - функции CodeByte DeCodeByte. Их правишь, получаешь другой алгоритм.

На одну картинку можно код накладывать несколько раз, на качестве не скажеться.
Правда новый код старый сотрет. :)


 
MsGuns ©   (2007-09-03 17:14) [17]

>Anatoly Podgoretsky ©   (03.09.07 13:42) [4]
>Комментарий можно записать в любой файл.

 С этого места поподробнее, будьте так любезны


 
palva ©   (2007-09-03 17:32) [18]


> Steep ©   (03.09.07 14:58) [8]
>
> Вопрос не в том как устроен файл - а как записать инфу зная
> как он устроен...
> Я не понимаю как именно происходит запись :(


Сначала в новый файл переписывается начало исходного файла, потом туда записывается комментарий, потом копируется остаток файла. Новый файл получится с комментарием. Писать можно самыми разными функциями - стандартные функции паскаля, потоки в VCL, функции Windows-API и т. д.


 
Anatoly Podgoretsky ©   (2007-09-03 20:01) [19]

> MsGuns  (03.09.2007 17:14:17)  [17]

Copy /b a+b /b c


 
oldman ©   (2007-09-03 20:25) [20]


> стандартный просмотрщик видел картинку, а моя прогамма и
> текст?


А на хрена, можно узнать?


 
Steep ©   (2007-09-04 13:19) [21]

Спасибо всем за команды и приведенный код - буду разбиратся!

> А на хрена, можно узнать?

Чтобы знать как!



Страницы: 1 вся ветка

Текущий архив: 2007.09.30;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.022 c
15-1188808368
Crazybobr
2007-09-03 12:32
2007.09.30
Кто-нить играет по сети в Sniper Elite?


4-1175360086
Vovka
2007-03-31 20:54
2007.09.30
Пропадающий курсор


15-1188799204
yura123
2007-09-03 10:00
2007.09.30
коннекшн между домом


6-1169220531
Death
2007-01-19 18:28
2007.09.30
Узнать тип сообщения, присланого TServerSocket


15-1186565545
EvChul
2007-08-08 13:32
2007.09.30
Посоветуйте компоненты для ГИС