Форум: "KOL";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "KOL";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.034 c