![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
kol_twofish [Delphi, Windows]
Deimos © (2004-03-12 14:52:00)Если кто знает, подскажите пожалуйста
где взять Twofish.Inc ,
kol_twofish на него ссылается, а в архиве с модулем его нет
брал на http://bonanzas.rinet.ru/r_adds.htm#Cryptography
Deimos (2004-03-20 03:42:00) [1]да, именно так и писал....
поставил 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.
Gandalf (2004-03-19 10:24:00) [2]А что ты прописал, Applet.ProcesMessages; и не помогло?
Deimos (2004-03-18 17:58:00) [3]не помогает :(
Deimos (2004-03-18 17:58:00) [4]не помогает :(
mdw (2004-03-17 10:41:00) [5]После изменения Прогресса.
progress1.Progress:= progress1.Progress+1;
Deimos (2004-03-16 18:33:00) [6]Где именно?
Gandalf (2004-03-16 09:05:00) [7]поставь ProcesMessage
Deimos (2004-03-15 19:46:00) [8]Все с шифрованием я разобрался..
еще одна проблема :
Написал модуль шифрования и хотелось-бы , чтобы при его работе появлялся прогресс-бар, но что-то не выходит..
форма появляется уже после выполнения шифрования сразу с заполненным прогресс-баром..
Где грабли ??
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.
Deimos (2004-03-14 15:10:00) [9]о пардон,
дешифровал я так :
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 работает только со строками при попытке подать на вход куска файла на выходе получается мусор (после дешифрования, всмысле).
Там явно нужно что-то изменить, вот только еще-бы знать что ??
Gandalf (2004-03-13 08:28:00) [10]Там разве примера нет? Мне кажется или они абсолютно одинаковы... с чего ты взял, что он должно дешифровать?
Deimos (2004-03-13 01:44:00) [11]Всё.. нашел, спасибо, теперь другая проблема :))
суть проблемы такова: необходимо взять первые 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-12 21:34:00) [12]Скачай с kol.mastak.ru KOLCryptoLib - это аналог и там все работало