Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.078 c
2-1188903449
em240
2007-09-04 14:57
2007.09.30
MSSQL2000+запуск функции из DLL


15-1188374949
schaps
2007-08-29 12:09
2007.09.30
Может есть у кого FastReport 2.45 ( открывает frf)


3-1180421495
MZ
2007-05-29 10:51
2007.09.30
непонятки с Null в хранимых процедурах FireBird


15-1188786679
Slider007
2007-09-03 06:31
2007.09.30
С днем рождения ! 3 сентября 2007 понедельник


15-1188721437
fisher
2007-09-02 12:23
2007.09.30
IQ посетителей форума





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский