Форум: "Прочее";
Текущий архив: 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