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

Вниз

kol_twofish   Найти похожие ветки 

 
Deimos ©   (2004-03-12 14:52) [0]

Если кто знает, подскажите пожалуйста
где взять Twofish.Inc ,
kol_twofish на него ссылается, а в архиве с модулем его нет
брал на http://bonanzas.rinet.ru/r_adds.htm#Cryptography


 
Gandalf ©   (2004-03-12 21:34) [1]

Скачай с kol.mastak.ru KOLCryptoLib - это аналог и там все работало


 
Deimos ©   (2004-03-13 01:44) [2]

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

я пытался шифровать так :


var
key:pchar;
TFData:TTwofishData;
inblock,outblock:array [0..255]of char;
Source: PStream;
Dest: PStream;

begin
key:="qm3igmfk";

Source:=NewReadFileStream (ParamStr(1));
Dest:=NewWriteFileStream (ParamStr(1)+".2fh");

source.read(inblock,256);

TwofishInit(tfdata,key,8,nil);
twofishencryptcbc(tfdata,inblock,outblock,length(inblock));
TwofishReset(tfdata);
TwoFishBurn(tfdata);

dest.Write(outblock,256);
Source.Free;
dest.Free;
end;


и дешифровать так :


var
key:pchar;
TFData:TTwofishData;
inblock,outblock:array [0..255]of char;
Source: PStream;
Dest: PStream;

begin
key:="qm3igmfk";

Source:=NewReadFileStream (ParamStr(1));
Dest:=NewWriteFileStream (ParamStr(1)+".2fh");

source.read(inblock,256);

TwofishInit(tfdata,key,8,nil);
twofishencryptcbc(tfdata,inblock,outblock,length(inblock));
TwofishReset(tfdata);
TwoFishBurn(tfdata);

dest.Write(outblock,256);
Source.Free;
dest.Free;
end;

в результате получается каша..
что неправильно?
(использовал kol_twofish)


 
Gandalf ©   (2004-03-13 08:28) [3]

Там разве примера нет? Мне кажется или они абсолютно одинаковы... с чего ты взял, что он должно дешифровать?


 
Deimos ©   (2004-03-14 15:10) [4]

о пардон,
дешифровал я так :

var
key:pchar;
TFData:TTwofishData;
inblock,outblock:array [0..255]of char;
Source: PStream;
Dest: PStream;


begin
key:="qm3igmfk" ;

Source:=NewReadFileStream (ParamStr(1));
Dest:=NewWriteFileStream (ParamStr(1)+".2fh");

source.read(outblock,256);

TwofishInit(tfdata,key,8,nil);
TwofishReset(tfdata);
twofishdecryptcbc(tfdata,outblock,inblock,length(outblock));
TwoFishBurn(tfdata);

dest.Write(inblock,256);
Source.Free;
dest.Free;
end.


кстати, пример данный в исходнике KolKryptoLib работает только со строками при попытке подать на вход куска файла на выходе получается мусор (после дешифрования, всмысле).
Там явно нужно что-то изменить, вот только еще-бы знать что ??


 
Deimos ©   (2004-03-15 19:46) [5]

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

 program Project1;

{$R *.res}

uses
 windows,
 messages,
 kol,
 KOLBlockCipher,
 KOLSHA384;

var
form:Pcontrol;
progress1:Pcontrol;
//********************

procedure start( Dummy : Pointer; Sender: PControl );
var
Source, Dest: pStream;
len: integer;     // длинна куска
cel,ost:integer; // для операций деления
i: integer;     // счетчик

inbuf,outbuf: array [1..1000]of byte;

fish:TKOLBlowfish;
SHA384: TKOLSHA384;
DigSHA384: array [0..47] of byte; // 384 бит на ключ

begin
progress1.Progress:=0;

Source:= NewReadFileStream (ParamStr(1));
cel:=source.Size div 1000; //количество целых оборотов по 1000  байт
ost:=source.Size mod 1000; // остаток

progress1.MaxProgress:=cel;

if ParamStr(2)= "/e" then
Dest:=NewWriteFileStream (ParamStr(1)+".bfs")
else
Dest:=NewWriteFileStream (ChangeFileExt(ParamStr(1),""));

SHA384:= NewSHA384;
SHA384.InitHash; // Инициализируем хеш
SHA384.UpdateStr("password"); // Хешируем пароль
SHA384.Final(DigSHA384); // Получаем захешированный пароль как 384 битный ключ
                        // для blowfish максимум 448 байт

SHA384.Burn;             // Очищаем хеш

len:=1000;         // Устанавливаем длину блока
                 // данных для шифровки/расшифровки
//***********************************************************************
if ParamStr(2) = "/e" then        //если нас просят шифровать
begin
 for i:= cel downto 1 do
 begin
   source.Read(inBuf,len);

   fish:=NewBlowfish;
   fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ
      fish.EncryptOFB(inbuf,outbuf,len);   //шифруем
   fish.Burn;
   dest.Write(outBuf,len);           //пишем в конечный файл 384 байта
   progress1.Progress:= progress1.Progress+1;// увеличим прогресс бар
 end;
 source.Read(inBuf,ost);  //дочитываем остатки
 fish:=NewBlowfish;
 fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ
    fish.EncryptOFB(inbuf,outbuf,ost);   //шифруем остаток
 fish.Burn;
 dest.Write(outBuf,ost);
end
//*********************************************
else           // иначе расшифровываем
   begin
 for i:= cel downto 1 do
 begin
   source.Read(inBuf,len);
   fish:=NewBlowfish;
   fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ
      fish.DecryptOFB(inbuf,outbuf,len);  //расшифровываем
   fish.Burn;
   dest.Write(outBuf,len);           //пишем в конечный файл 384 байт
 end;
 source.Read(inBuf,ost);
 fish:=NewBlowfish;
 fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ!!!
    fish.DecryptOFB(inbuf,outbuf,ost);  //расшифровываем
 fish.Burn;
 dest.Write(outBuf,ost);
 progress1.Progress:= progress1.Progress+1;// увеличим прогресс бар
end;

source.Free;           // всех освобождаем
dest.free;
fish.Free;
SHA384.free;
end;

//-----------------

begin
form:=newForm(applet, "Идёт упаковка");
form.Width:=304;
form.Height:=40;
progress1:=NewProgressbar(form);
progress1.Height:=10;
progress1.Width:=300;

form.OnShow:= TOnEvent(MakeMethod(nil,@start));
run(form);

end.


 
Gandalf ©   (2004-03-16 09:05) [6]

поставь ProcesMessage


 
Deimos ©   (2004-03-16 18:33) [7]

Где именно?


 
mdw ©   (2004-03-17 10:41) [8]

После изменения Прогресса.
progress1.Progress:= progress1.Progress+1;


 
Deimos ©   (2004-03-18 17:58) [9]

не помогает :(


 
Deimos ©   (2004-03-18 17:58) [10]

не помогает :(


 
Gandalf ©   (2004-03-19 10:24) [11]

А что ты прописал, Applet.ProcesMessages; и не помогло?


 
Deimos ©   (2004-03-20 03:42) [12]

да, именно так и писал....
поставил Applet.ProcesMessages после изменения прогрессБара
прога начала работать без подвисания, но прогрессБар все-равно не показывает.., только после окончания шифрования и сразу заполненный..
может кто-нибудь у себя откомпилирует?
прога должна работать из командной строки
пример: чтобы зашифровать 1.zip

  Project1.exe 1.zip /e

       чтобы расшифровать 1.zip.bfs

  Project1.exe 1.zip.bfs

а то я не знаю уже на что думать...

вот полный код:


program Project1;

{$R *.res}

uses
 windows,
 messages,
 kol,
 KOLBlockCipher,
 KOLSHA384;

var
form:Pcontrol;
progress1:Pcontrol;
//********************

procedure start( Dummy : Pointer; Sender: PControl );
var
Source, Dest: pStream;
len: integer;     // длинна куска
cel,ost:integer; // для операций деления
i: integer;     // счетчик

inbuf,outbuf: array [1..1000]of byte;

fish:TKOLBlowfish;
SHA384: TKOLSHA384;
DigSHA384: array [0..47] of byte; // 384 бит на ключ

begin
progress1.Progress:=0;

Source:= NewReadFileStream (ParamStr(1));
cel:=source.Size div 1000; //количество целых оборотов по 1000  байт
ost:=source.Size mod 1000; // остаток

progress1.MaxProgress:=cel;

if ParamStr(2)= "/e" then
Dest:=NewWriteFileStream (ParamStr(1)+".bfs")
else
Dest:=NewWriteFileStream (ChangeFileExt(ParamStr(1),""));

SHA384:= NewSHA384;
SHA384.InitHash; // Инициализируем хеш
SHA384.UpdateStr("password"); // Хешируем пароль
SHA384.Final(DigSHA384); // Получаем захешированный пароль как 384 битный ключ
                        // для blowfish максимум 448 байт

SHA384.Burn;             // Очищаем хеш

len:=1000;         // Устанавливаем длину блока
                 // данных для шифровки/расшифровки
//***********************************************************************
if ParamStr(2) = "/e" then        //если нас просят шифровать
begin
 for i:= cel downto 1 do
 begin
   source.Read(inBuf,len);
   fish:=NewBlowfish;
   fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ
      fish.EncryptOFB(inbuf,outbuf,len);   //шифруем
   fish.Burn;
   dest.Write(outBuf,len);           //пишем в конечный файл 1000 байта
   progress1.Progress:= progress1.Progress+1;// увеличим прогресс бар
   applet.ProcessMessages;
 end;
 source.Read(inBuf,ost);  //дочитываем остатки
 fish:=NewBlowfish;
 fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ
    fish.EncryptOFB(inbuf,outbuf,ost);   //шифруем остаток
 fish.Burn;
 dest.Write(outBuf,ost);
end
//*********************************************
else           // иначе расшифровываем
   begin
 for i:= cel downto 1 do
 begin
   source.Read(inBuf,len);
   fish:=NewBlowfish;
   fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ
      fish.DecryptOFB(inbuf,outbuf,len);  //расшифровываем
   fish.Burn;
   dest.Write(outBuf,len);           //пишем в конечный файл 1000 байт
   progress1.Progress:= progress1.Progress+1;// увеличим прогресс бар
   applet.ProcessMessages;

 end;
 source.Read(inBuf,ost);
 fish:=NewBlowfish;
 fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ!!!
    fish.DecryptOFB(inbuf,outbuf,ost);  //расшифровываем
 fish.Burn;
 dest.Write(outBuf,ost);
end;

source.Free;           // всех освобождаем
dest.free;
fish.Free;
SHA384.free;
end;

//-----------------

begin
form:=newForm(applet, "Идёт упаковка");
form.Width:=304;
form.Height:=40;
progress1:=NewProgressbar(form);
progress1.Height:=10;
progress1.Width:=300;

form.OnShow:= TOnEvent(MakeMethod(nil,@start));

run(form);

end.



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

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

Наверх




Память: 0.52 MB
Время: 0.027 c
14-1091553860
DDA
2004-08-03 21:24
2004.08.22
jmp +$06


1-1092026807
dimon_programmer
2004-08-09 08:46
2004.08.22
IF не работает


1-1091793629
Sourse
2004-08-06 16:00
2004.08.22
Как перетаскивать файлы из проводника в программу


14-1091624567
by
2004-08-04 17:02
2004.08.22
Методики разработки ПО


1-1091858043
Tika-Z
2004-08-07 09:54
2004.08.22
Картинки на форме и на кнопках