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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование файлов с шифрованием 
V
    Опции темы
HoochieMen
Дата 24.10.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile 

У меня такая задача:
При вызове функции копирования - она должна шифровать копируемый файл, по определённому ключу.

Можете привести пример такой функции или какой-либо библиотеки с Копированием файлов с шифрацией. Естественно и с дешифрацией.

пока пользуюсь:

Код

function f_CopyFile(FromFile, ToDir : string) : boolean; 
var F : TShFileOpStruct; 
begin 
  F.Wnd := 0; F.wFunc := FO_COPY; 
  FromFile:=FromFile+#0; F.pFrom:=pchar(FromFile); 
  ToDir:=ToDir+#0; F.pTo:=pchar(ToDir); 
  F.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_NOERRORUI or FOF_NOCONFIRMMKDIR or FOF_SILENT; 
  result:=ShFileOperation(F) = 0; 
end;

Или как-то подрихтовать эту функцию для возможности шифрации, например:

Код

function f_CopyFile(FromFile, ToDir : string; key: integer) : boolean; 

,где key - ключь для шифрации и дешифрации;


 smile  Это очень срочно ..
PM MAIL   Вверх
drkot
Дата 24.10.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



Твою функцию врядли можно подрехтовать для шифрования. В ней собственно шифровать нечего.
Копирование это перекладывание содержимого из одного контейнера в другой. На таком принципе и строй алгоритм копирования + видоизменяй (шифруй, архивируй) по ходу процесса.


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


Бывалый
*


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

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



Посмотри здесь. Я там предлагал посмотреть на библиотеку, которая умеет сжимать и шифровать
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
HoochieMen
Дата 24.10.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А есть функция например такая?:

Код

function file_archiving (file_name_in: string; file_name_out: string; password: integer)

Которая архивировала бы файл с паролем password.
Типа того, как это делает WinRar

И какие для этого нужны модули ?
PM MAIL   Вверх
drkot
Дата 24.10.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



Цитата(HoochieMen @  24.10.2006,  15:56 Найти цитируемый пост)
А есть функция например такая?:

во вселенной много кое чего есть. (а для разархивирования подойдет file_dearhiving) smile 


HoochieMen, понимаеш ты неправильно ставиш вопрос.
попросил либу
Цитата(HoochieMen @  24.10.2006,  13:52 Найти цитируемый пост)
какой-либо библиотеки

тебе дали ссылку.

Не знаеш как копировать файлы - читай FAQ форума + поиск.
Не умееш пользоваться потоками - аналогично.
На форуме многократно поднимались темы типа "Hello World". Посмотри внизу страници.

Добавлено @ 16:27 
Цитата(HoochieMen @  24.10.2006,  15:56 Найти цитируемый пост)
Типа того, как это делает WinRar

под кнопкой добавить добавить в архив скрывается функциональность на несколько тысяч строк.


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


Эксперт
****


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

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



Специалиста по CryptoAPI вызывали? smile
Вот, накидал по быстрому.
Сделал тебе 2 функции: Crypt - зашифровать, Decrypt - расшифровать.
Код

unit Transform;

interface

uses Windows, Classes;

procedure Crypt(InFile, OutFile, Password: string);

procedure Decrypt(InFile, OutFile, Password: string);

implementation

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);
    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);
      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;

end.


Пример:
Код

Program Test;

uses Transform;

begin
  Crypt('1.txt', '2.txt', 'SecretPassword');
  Decrypt('2.txt', '3.txt', 'SecretPassword');
end.

PM MAIL   Вверх
HoochieMen
Дата 25.10.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо Огромное  smile . Всё работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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