Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DCPcrypt процесс выполнения. 
:(
    Опции темы
TrippDian
Дата 27.10.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Помогите, пожалуйста, никак не могу реализовать наглядность процесса выполнения шифрования текущего файла с помощью компонента DCPcrypt v2 Beta 3. Нужно сделать progress bar в программе, а как это сделать не могу никак додуматься. Или посоветуйте компонент не уступающий возможности выше описанному с возможностью отслеживать процесс выполнения шифрования... Спасибо большое заранее.

Это сообщение отредактировал(а) TrippDian - 27.10.2006, 12:27
PM MAIL   Вверх
drkot
Дата 27.10.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



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


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
TrippDian
Дата 27.10.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



А по подробнее про фиктивный прогресс от стороннего таймера можно ? =)
PM MAIL   Вверх
Reptile
Дата 27.10.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: нет
Всего: 3



Цитата

А по подробнее про фиктивный прогресс от стороннего таймера можно ? =) 

Кидаеш на форму ProgressBar, таймер и по таймеру выставляеш
Код

ProgressBar1.StepIt;


Это сообщение отредактировал(а) Reptile - 27.10.2006, 14:49
PM MAIL   Вверх
TrippDian
Дата 27.10.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



А каким макаром он узнает на какой стадии обработки находится мой файл ?
PM MAIL   Вверх
Bose
Дата 27.10.2006, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Запустить процесс шифрования небольшого объема данных, замерь время, за которое этот объём будет зашифрован. И используй полученный интервал.
PM MAIL WWW Skype   Вверх
drkot
Дата 27.10.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(TrippDian @  27.10.2006,  15:35 Найти цитируемый пост)
А каким макаром он узнает на какой стадии обработки находится мой файл ?

никаким. на то он и фиктивный.

по методу Bose, расчитывай ориентировочное время и домножай на коэффициент для надежноти. а на прогресе напиши, что время ориентировочное.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
TrippDian
Дата 27.10.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Цитата(Bose @ 27.10.2006,  15:46)
Запустить процесс шифрования небольшого объема данных, замерь время, за которое этот объём будет зашифрован. И используй полученный интервал.

Прога должна использоваться на разных компьютерах с разными характеристиками и разными задачами, следовательно время везде будет разное... Не подходит это...

Добавлено @ 15:54 
Попробую размер файла отслеживать и на основе этого прогресс пускать, но всеже компы то разные и скорость разная будет... хотелось бы что-нибудь поточнее =(
PM MAIL   Вверх
Reptile
Дата 27.10.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: нет
Всего: 3



Попробуй 
Цитата

Запустить процесс шифрования небольшого объема данных, замерь время, за которое этот объём будет зашифрован.

выполнить программно smile 
PM MAIL   Вверх
Bose
Дата 27.10.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(TrippDian @  27.10.2006,  15:52 Найти цитируемый пост)
Прога должна использоваться на разных компьютерах с разными характеристиками и разными задачами, следовательно время везде будет разное... Не подходит это...

Программно выполняй, непосредственно перед выполнением самого шифрования.

PM MAIL WWW Skype   Вверх
TrippDian
Дата 27.10.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Сори, мб туплю, поподробнее можно, а то что-то никак не могу понять =)
PM MAIL   Вверх
Snowy
Дата 27.10.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// криптоблок
const
  bsz = 65532;
  ADVAPI32    = 'advapi32.dll';
  PROV_RSA_FULL    = 1;
  SIMPLEBLOB       = $1;
  CRYPT_VERIFYCONTEXT = $F0000000;
  CALG_RC4         = ((3 shl 13) or (4 shl 9) or 1);
  CALG_SHA         = ((4 shl 13) or 0 or 4);

type
  HCRYPTPROV  = ULONG;
  HCRYPTKEY   = ULONG;
  ALG_ID = ULONG;
  PHCRYPTPROV = ^HCRYPTPROV;
  PHCRYPTKEY  = ^HCRYPTKEY;
  LPAWSTR = PWideChar;
  HCRYPTHASH  = ULONG;
  PHCRYPTHASH = ^HCRYPTHASH;
function CryptAcquireContext(Prov:PHCRYPTPROV;Container:LPAWSTR;Provider:LPAWSTR;ProvType:DWORD;Flags:DWORD):BOOL;stdcall;external ADVAPI32 name 'CryptAcquireContextW';
function CryptCreateHash(Prov:HCRYPTPROV;Algid:ALG_ID;Key:HCRYPTKEY;Flags:LongInt;Hash:PHCRYPTHASH):BOOL;stdcall;external ADVAPI32 name 'CryptCreateHash';
function CryptHashData(Hash:HCRYPTHASH;Data:PBYTE;DataLen :LongInt;Flags:LongInt):BOOL;stdcall;external ADVAPI32 name 'CryptHashData';
function CryptDeriveKey(Prov:HCRYPTPROV;Algid:ALG_ID;BaseData:HCRYPTHASH;Flags:LongInt;Key:PHCRYPTKEY) :BOOL;stdcall;external ADVAPI32 name 'CryptDeriveKey';
function CryptDestroyHash(hHash :HCRYPTHASH) :BOOL;stdcall;external ADVAPI32 name 'CryptDestroyHash';
function CryptReleaseContext(hProv:HCRYPTPROV;dwFlags:DWORD):BOOL;stdcall;external ADVAPI32 name 'CryptReleaseContext';
function CryptEncrypt(Key:HCRYPTKEY;Hash:HCRYPTHASH;Final:BOOL;Flags:DWORD;Data:PBYTE;Len:PDWORD;BufLen:DWORD):BOOL;stdcall;external ADVAPI32 name 'CryptEncrypt';
function CryptDecrypt(Key:HCRYPTKEY;Hash:HCRYPTHASH;Final:BOOL;Flags:DWORD;Data:PBYTE;Len:PDWORD):BOOL;stdcall;external ADVAPI32 name 'CryptDecrypt';

var
  hProv: HCRYPTPROV;
  hSKey: HCRYPTKEY;

procedure Init(Password: string);
var
  hash:  HCRYPTHASH;
begin
  CryptAcquireContext(@hProv, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
  CryptCreateHash(hProv, CALG_SHA, 0, 0, @hash);
  CryptHashData(hash, @Password[1], length(Password), 0);
  CryptDeriveKey(hProv, CALG_RC4, hash, 0, @hSKey);
  CryptDestroyHash(hash);
end;

procedure Done;
begin
  CryptReleaseContext(hProv, 0);
end;

procedure Process(InFile, OutFile, Password: string; Crypt: boolean);
var
  fs,fd: TFileStream;
  s: string;
  sz: dword;
begin
  SetLength(s, bsz); Init(Password);
  try
    fs := TFileStream.Create(InFile, $40);
    fd := TFileStream.Create(OutFile, $FFFF);
    Form1.ProgressBar1.Max := fs.Size div bsz;
    try
      repeat
        sz := fs.Read(s[1], bsz);
        if Crypt then CryptEncrypt(hSKey, 0, (sz < bsz), 0, pointer(s), @sz, sz)
        else CryptDecrypt(hSKey, 0, (sz < bsz), 0, pointer(s), @sz);
        fd.Write(s[1], sz);
        Form1.ProgressBar1.Position := fs.Position div bsz;
      until sz < bsz;
    finally
      fs.Free; fd.Free;
    end;
  finally
    Done;
  end;
end;

procedure Crypt(InFile, OutFile, Password: string);
begin
  Process(InFile, OutFile, Password, true);
end;

procedure Decrypt(InFile, OutFile, Password: string);
begin
  Process(InFile, OutFile, Password, false);
end;

// Кончился криптоблок

// Батоны:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Crypt('C:\1.dat', 'C:\2.dat', 'VerySecretPassword'); // шифруем
  ShowMessage('Зашифровано!');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Decrypt('C:\2.dat', 'C:\3.dat', 'VerySecretPassword'); // расшифровываем
  ShowMessage('Расшифровано!');
end;

end.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.