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

Вниз

Копирование с шифрованием   Найти похожие ветки 

 
RustB   (2008-10-02 00:08) [0]

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


 
Германн ©   (2008-10-02 01:42) [1]


> Нужна по возможности быстрая функция которая копировала
> и попутно зашифровывала бы файл, требования к алгоритму
> шифрования самые минимальные.

А какие требования к файлу?
По-моему это уже третий за год подобный вопрос.


 
Anatoly Podgoretsky ©   (2008-10-02 07:48) [2]

> RustB  (02.10.2008 0:08:00)  [0]

Если минимальные, то XOR, если максимальные, то тоже XOR, но с ключом L>M


 
Jeer ©   (2008-10-02 09:36) [3]


> попутно зашифровывала


Таблица подстановок ( побайтная ) - как вариант.


 
@!!ex ©   (2008-10-02 09:55) [4]

xor, что тут думать... самая быстрая операция.
делаешь башой ключ. шифруеш его RSA и все.


 
RustB   (2008-10-02 10:10) [5]

шифруются файлы до 1 Mb.
Как вариант

function FileCrypt(InFile, OutFile: String; Key: TWordTriple; Encrypt: Boolean): boolean;
var
  MIn, MOut: TMemoryStream;
begin
  MIn := TMemoryStream.Create;
  MOut := TMemoryStream.Create;
  Try
    MIn.LoadFromFile(InFile);
    MOut.SetSize(MIn.Size);
    if Encrypt then
      Result := MemoryEncrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key)
    else
      Result := MemoryDecrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key);
    MOut.SaveToFile(OutFile);
  finally
    MOut.Free;
    MIn.Free;
  end;
end;

толко нужна еще сюда функция для шифрования памяти MemoryEncrypt ну и MemoryDecrypt разумеется


 
@!!ex ©   (2008-10-02 10:28) [6]

> [5] RustB   (02.10.08 10:10)

ну и в чем проблема?


 
blackman ©   (2008-10-02 17:39) [7]

function MemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
var
 pIn, pOut: ^byte;
 i : Cardinal;
begin
 if SrcSize = TargetSize then
 begin
   pIn := Src;
   pOut := Target;
   for i := 1 to SrcSize do
   begin
     pOut^ := pIn^ xor (Key[2] shr 8);
     Key[2] := Byte(pIn^ + Key[2]) * Key[0] + Key[1];
     inc(pIn);
     inc(pOut);
   end;
   Result := True;
 end else
   Result := False;
end;

function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
var
 pIn, pOut: ^byte;
 i : Cardinal;
begin
 if SrcSize = TargetSize then
 begin
   pIn := Src;
   pOut := Target;
   for i := 1 to SrcSize do
   begin
     pOut^ := pIn^ xor (Key[2] shr 8);
     Key[2] := byte(pOut^ + Key[2]) * Key[0] + Key[1];
     inc(pIn);
     inc(pOut);
   end;
   Result := True;
 end else
   Result := False;
end;

function TextCrypt(const s: string; Key: TWordTriple; Encrypt: Boolean): string;
var
 bOK: Boolean;
begin
 SetLength(Result, Length(s));
 if Encrypt then
   bOK := MemoryEncrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key)
 else
   bOK := MemoryDecrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key);
 if not bOK then Result := "";
end;


 
RustB   (2008-10-02 18:45) [8]

TWordTriple что за тип? Или нужно еще чтото дописать в раздел uses?


 
Поросенок Винни-Пух ©   (2008-10-02 18:55) [9]

Key[2] := ....
так что такое TWordTripple?


 
@!!ex ©   (2008-10-02 20:00) [10]

Насколько я могу судить по коду - это тупо массив байтов...


 
ПЗ   (2008-10-02 21:15) [11]

program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils;
const
   two32=4294967296;                             //2^32
   C1=$1010104;
   C2=$1010101;
   S=7476199048732314356;                 //Синхропосылка
   helpStr="Usage:<sourcefile> <dstfile> [-E|-D] [-S|-G|-F] [-I]"#13#10+
   "-E -encrypt srcfile to dstfile"#13#10+
   "-D -decrypt srcfile to dstfile"#13#10+
   "-S -simple mode (8 bit aligned data)"#13#10+
   "-G -gamma mode"#13#10+
   "-F -gamma with feedback mode"#13#10+
   "-I -data safety mode (imito injection)";

var K:array [0..7] of LongWord=(0,1,2,3,4,5,6,7); //Ключ
   H:array[0..7,0..15] of Byte=
   ((4,10,9,2,13,8,0,14,6,11,1,12,7,15,5,3),
    (14,11,4,12,6,13,15,10,2,3,8,1,0,7,5,9),
    (5,8,1,13,10,3,4,2,14,15,12,7,6,0,9,11),
    (7,13,10,1,0,8,9,15,14,4,6,12,11,2,5,3),
    (6,12,7,1,5,15,13,8,4,10,9,14,0,3,11,2),
    (4,11,10,0,7,2,1,13,3,6,8,5,9,12,15,14),
    (13,11,4,1,3,15,5,9,0,10,14,7,6,8,2,12),
    (1,15,13,0,5,7,10,4,9,2,3,14,6,11,8,12));    //Таблица замен
    src,dst:String;
    task:Byte=0;
    mode:Byte=0;
    imito:Boolean=false;
    f1,f2:File;
    j:Byte;
    I:Int64;

 function DecToBin(K:Int64;Bits:Byte):String;
 var i:Integer;
 begin
   Result:="";
   for i:=1 to 64 do
   begin
     if i>Bits then Break;
     if (K mod 2)=0 then Result:="0"+Result else Result:="1"+Result;
     K:=K div 2;
   end;
 end;

 //Циклический сдвиг влево
 function ROL(val: LongWord; shift: Byte): LongWord;
 asm
   mov  cl, dl;
   rol  eax, cl;
 end;

 //Основной шаг криптопреобразования
 procedure CryptoStep(var N:Int64; X:LongWord);
 var S,Sh,N1,N2:LongWord;
     i,Si:Byte;
 begin
   N1:=N;                       //Младшая часть блок данных
   N2:=N shr 32;                //Старшая часть блок данных
   Sh:=0;
   S:=(N1+X)mod two32;
   for i:=0 to 7 do
   begin
     Si:=((S shr (i*4)) and 15); //Выделяем тетрады S для замены
     Sh:=Sh or H[i,Si] shl (i*4);//Замена тетрады и образование нового S
   end;
   S:=Rol(Sh,11);                //Сдвиг
   S:=S xor N2;
   N:=N1;
   N:=(N shl 32) or S;            //Обмен местами частей блока
 end;

 //Базовый шаг шифрования
 procedure EncryptBase(var N:Int64);
 var i,j:Byte;
     N1:LongWord;
 begin
   for i:=0 to 31 do               //32 шага криптопреобразования
   begin                           //01234567012345670123456776543210
     if i<24 then j:=i mod 8 else j:=31-i;
     CryptoStep(N,K[j]);
   end;
   N1:=N shr 32;                    //Обмен частей блока данных
   N:=(N shl 32) or N1;
 end;

 //Базовый шаг расшифрования
 procedure DecryptBase(var N:Int64);
 var i,j:Byte;
     N1:LongWord;
 begin
   for i:=0 to 31 do                //32 шага криптопреобразования
   begin                            //01234567765432107654321076543210
     if i<8 then j:=i else j:=(31-i) mod 8;
     CryptoStep(N,K[j]);
   end;
   N1:=N shr 32;                    //Обмен частей блока данных
   N:=(N shl 32) or N1;
 end;

 //Базовый шаг выработки имитовставки
 procedure ImitoBase(var N:Int64);
 var i:Byte;
 begin
   for i:=0 to 15 do                //16 шагов криптопреобразования
     CryptoStep(N,K[i mod 8]);
 end;


 
ПЗ   (2008-10-02 21:15) [12]

//Шифрование файла в режиме простой замены (р-р д.б. кратен 64 бит)
 procedure SimpleEncrypt(var f1,f2:file);
 var Block:Int64;
     c:Integer;
 begin
    while not eof(f1) do
    begin
      Block:=0;
      BlockRead(f1,Block,Sizeof(Block),c);//Получение блока данных
      EncryptBase(Block);                 //Шифрование
      BlockWrite(f2,Block,8);             //Запись (строго 64бит!)
    end;
 end;
 //Расфрование файла в режиме простой замены (р-р д.б. кратен 64 бит)
 procedure SimpleDecrypt(var f1,f2:file);
 var Block:Int64;
     c:Integer;
 begin
    while not eof(f1) do
    begin
      Block:=0;
      BlockRead(f1,Block,Sizeof(Block),c);//Получение блока данных
      DecryptBase(Block);                 //Расшифрование
      BlockWrite(f2,Block,8);             //Запись (строго 64бит!)
    end;
 end;

 //Шифрование файла в режиме гаммирования
 procedure GammingEncrypt(var f1,f2:file; S:Int64);
 var Block:Int64;
     S0,S1:LongWord;
     c:Integer;
 begin
   EncryptBase(S);                        //Зашифровка синхропосылки
   S0:=S;                                 //Младшая часть синхропосылки
   S1:=S shr 32;                          //Старшая часть синхропосылки
   while not eof(f1) do
   begin
     BlockRead(f1,Block,Sizeof(Block),c); //Получение блока данных
     S0:=(S0+C1)mod two32;
     S1:=((S1+C2-1)mod (two32-1))+1;
     S:=S1;
     S:=(S shl 32)or S0;
     EncryptBase(S);                       //Зашифрование
     Block:=Block xor S;
     BlockWrite(f2,Block,c);               //Запись блока данных
   end;
 end;

 //Расшифрование файла в режиме гаммирования (аналогично)
 procedure GammingDecrypt(var f1,f2:file; S:Int64);
 begin
    GammingEncrypt(f1,f2,S);
 end;

 //Шифрование файла в режиме гаммирования с обратной связью
 procedure FeedbackGammingEncrypt(var f1,f2:file; S:Int64);
 var Block:Int64;
     c:Integer;
 begin
   while not eof(f1) do
   begin
     BlockRead(f1,Block,Sizeof(Block),c);  //Получение блока данных
     EncryptBase(S);                       //Зашифровка синхропосылки
     Block:=Block xor S;
     S:=Block;
     BlockWrite(f2,Block,c);               //Запись блока данных
   end;
 end;

 //Расшифрование файла в режиме гаммирования с обратной связью
 procedure FeedbackGammingDecrypt(var f1,f2:file; S:Int64);
 var Block,NewBlock:Int64;
     c:Integer;
 begin
   while not eof(f1) do
   begin
     BlockRead(f1,Block,Sizeof(Block),c);  //Получение блока данных
     EnCryptBase(S);                       //Зашифровка синхропосылки
     NewBlock:=Block xor S;
     S:=Block;                             //Синхропосылка формируется из ЗАШИФРОВАННЫХ данных
     BlockWrite(f2,NewBlock,c);            //Запись блока данных
   end;
 end;

 //Вычисление имитовставки файла
 function ImitoInjection(var f:File):int64;
 var Pos:Longint;
     S,Block:Int64;
     c:Integer;
 begin
   Pos:=FilePos(f);        //Вычисление текущей позиции
   Seek(F,0);
   S:=0;
   while not eof(f) do
   begin
     BlockRead(f,Block,Sizeof(Block),c);
     S:=Block xor S;
     ImitoBase(S);         //Базовый цикл выработки имитовставки
   end;
   Seek(F,Pos);            //Возврат позиции в файле
   Result:=S;
 end;
 procedure Err(msg:String);
 begin
   WriteLn(msg);
   WriteLn(helpStr);
   try
     CloseFile(f1);
     CloseFile(f2);
   except
   end;
   Halt;
 end;
begin

 if (ParamCount<2) then Err("");
 src:=ParamStr(1); if not FileExists(src) then src:="";
 dst:=ParamStr(2);
 if UpperCase(ParamStr(3))="-E" then task:=1 else
 if UpperCase(ParamStr(3))="-D" then task:=2;
 if UpperCase(ParamStr(4))="-S" then mode:=1 else
 if UpperCase(ParamStr(4))="-G" then mode:=2 else
 if UpperCase(ParamStr(4))="-F" then mode:=3;
 if UpperCase(ParamStr(5))="-I" then imito:=True;
 if (src="")or(dst="") then Err("source or destination file expected");

 WriteLn("NTF.EXE v.1.1");
 WriteLn("Source file:",src);
 WriteLn("Destination file:",dst);
 WriteLn("Enter key (8 numbers):");
 try              //Ввод ключа
 for j:=0 to 7 do
 begin
   Write("#",j+1," :");
   ReadLn(K[j]);
 end;
 except          //Введено неверное число (или буква)
    Err("Invalid number");
 end;
 AssignFile(f1,src);
 Reset(f1,1);
 AssignFile(f2,dst);
 Rewrite(f2,1);
 if (task<1)or(task>2) then Err("Incorrect task (crypt\decrypt)") else
 if task=1 then   //Шифрование файла
 begin
   if (mode<1)or(mode>3) then Err("Incorrect crypting mode");
   WriteLn("Encoding....");
   if imito then  //Запись имитовставки
   begin
     I:=ImitoInjection(f1);         //Вычисление имитовставки незашифрованного файла
     BlockWrite(f2,I,8);
     WriteLn("Imito injection written:",I);
   end;
   if mode=1 then SimpleEncrypt(f1,f2) else
   if mode=2 then GammingEncrypt(f1,f2,S) else
   if mode=3 then FeedBackGammingEncrypt(f1,f2,S);
 end else
 if task=2 then
 begin
   if (mode<1)or(mode>3) then Err("Incorrect crypting mode");
   WriteLn("Decoding....");

   if imito then  BlockRead(f1,I,8);//Чтение имитовставки
   if mode=1 then SimpleDecrypt(f1,f2) else
   if mode=2 then GammingDecrypt(f1,f2,S) else
   if mode=3 then FeedBackGammingDecrypt(f1,f2,S);
   if imito then                    //Сравнение имитовставки
   begin
                                   //Вычисление имитовставки расшифрованного файла
     if I=ImitoInjection(f2) then WriteLn("Imito check OK ",I) else WriteLn("Imito check FAILED ",I);
   end;
 end;
 WriteLn(FileSize(f2)," bytes processed");
 CloseFile(f1);
 CloseFile(f2);
end.


 
ПЗ   (2008-10-02 21:17) [13]

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


 
TStas ©   (2008-10-02 21:47) [14]

Вот чем я пользуюсь. Дёшево и сердито:
{&#207;&#240;&#238;&#246;&#229;&#228;&#243;&#240;&#224; &#234;&#241;&#238;&#240;&#237;&#238;&#227;&#238; &#248;&#232;&#244;&#240;&#238;&#226;&#224;&#237;&#232;&#255;/&#228;&#229;&#248;&#232;&#244;&#240;&#238;&#226;&#224;&#237;&#232;&#255; &#239;&#238;&#242;&#238;&#234;&#224;. Src - &#232;&#241;&#245;&#238;&#228;&#237;&#251;&#233; &#239;&#238;&#242;&#238;&#234;,
Dest - &#240;&#229;&#231;&#243;&#235;&#252;&#242;&#232;&#240;&#243;&#254;&#249;&#232;&# 233;, Key - &#239;&#238;&#242;&#238;&#234;-&#234;&#235;&#254;&#247;}
Procedure XorCodeStream(Src, Dest, Key: TStream);
var
 b1, b2, b3: Byte;
 I, SrcLn, KeyLn, n, m: Integer;
Begin
 m := src.Seek(0, soFromCurrent); //&#199;&#224;&#239;&#238;&#236;&#237;&#232;&#235; &#239;&#238;&#235;&#238;&#230;&#229;&#237;&#232;&#229; &#243;&#234;&#224;&#231;&#224;&#242;&#229;&#235;&#255; &#239;&#238;&#242;&#238;&#234;&#224;
 SrcLn := src.Seek(0, soFromEnd); //&#207;&#238;&#235;&#243;&#247;&#232;&#235; &#228;&#235;&#232;&#237;&#237;&#243; &#239;&#238;&#242;&#238;&#234;&#224;
 src.Seek(m, soFromBeginning); //&#194;&#229;&#240;&#237;&#243;&#235; &#243;&#234;&#224;&#231;&#224;&#242;&#229;&#235;&#252; &#226; &#231;&#224;&#228;

 KeyLn := Key.Seek(0, soFromEnd); //&#207;&#238;&#235;&#243;&#247;&#232;&#235; &#228;&#235;&#232;&#237;&#237;&#243; &#239;&#238;&#242;&#238;&#234;&#224;
 Key.Seek(0, soFromBeginning); //&#194;&#229;&#240;&#237;&#243;&#235; &#243;&#234;&#224;&#231;&#224;&#242;&#229;&#235;&#252; &#226; &#231;&#224;&#228;

 For i := 1 to SrcLn do //&#214;&#232;&#234;&#235; &#239;&#238; &#226;&#241;&#229;&#236;&#243; &#232;&#241;&#245;&#238;&#228;&#237;&#238;&#236;&#243; &#239;&#238;&#242;&#238;&#234;&#243;
   Begin
   N := Src.Read(b1, 1); //&#207;&#240;&#238;&#247;&#184;&#235; &#238;&#228;&#232;&#237; &#225;&#224;&#233;&#242; &#232;&#231; &#232;&#241;&#245;&#238;&#228;&#237;&#238;&#227;&#238;
   n := n mod KeyLn; //&#207;&#238;&#235;&#243;&#247;&#232;&#235;, &#234;&#224;&#234;&#238;&#233; &#225;&#224;&#233;&#242; &#247;&#232;&#242;&#224;&#242;&#252; &#232;&#231; &#234;&#235;&#254;&#247;&#224;
   Key.Seek(n, soFromBeginning); //&#205;&#224;&#248;&#184;&#235; &#253;&#242;&#238;&#242; &#225;&#224;&#233;&#242;
   Key.Read(b2, 1); //&#207;&#240;&#238;&#247;&#184;&#235; &#225;&#224;&#233;&#242;
   b3 := b1 xor b2; //&#206;&#242;&#234;&#241;&#238;&#240;&#232;&#235; &#232;&#241;&#245;&#238;&#228;&#237;&#251;&#233; &#225;&#224;&#233;&#242;
   Dest.Write(b3, 1); //&#200; &#231;&#224;&#239;&#232;&#241;&#224;&#235; &#226; &#227;&#238;&#242;&#238;&#226;&#251;&#233; &#239;&#238;&#242;&#238;&#234;
   End;
End;


 
@!!ex ©   (2008-10-02 22:23) [15]

procedure THEXEditor.CryptXOR(const Key: TXORKey);
var
 KeyIT, DataIT:integer;
begin
 KeyIT:=0;
 for DataIT := 0 to Length(FData) - 1 do begin
   FData[DataIT]:=FData[DataIT] xor Key[KeyIT];
   inc(KeyIT);
   if (KeyIT>=Length(Key)) then
     KeyIT:=0;
 end;
end;


 
Германн ©   (2008-10-03 00:59) [16]

Какое огромное количество готовых решений для "незрелого" вопроса!
:)
Тогда и я добавлю решение. Создавать WinRAR-архив с паролем и с опцией "Шифровать имена файлов". Против этого лома очень трудно будет найти "другой лом"! :)


 
Германн ©   (2008-10-03 01:56) [17]


> ПЗ   (02.10.08 21:17) [13]
>
> Не знаю, что понимается под копированием, но выше готовая
> консольная утилита для шифрования\расшифрования файла.

Т.е. в [13] это "отрыжка"? :)
Не знаю что спрашивали, но отвечаю то, что знаю :)


 
Поросенок Винни-Пух ©   (2008-10-03 09:26) [18]

эх, велосипедисты, велосипедисты .....
а про криптоапи никто и не вспомнил


 
Ega23 ©   (2008-10-03 10:12) [19]


> @!!ex ©   (02.10.08 09:55) [4]
>
> xor, что тут думать... самая быстрая операция.
> делаешь башой ключ. шифруеш его RSA и все.
>


RSA долго. AES быстрее будет. Но это - симметричное, одним ключом и кодировать и декодировать можно, в отличие от RSA.


 
Ega23 ©   (2008-10-03 10:14) [20]


> а про криптоапи никто и не вспомнил


С ним тонкости использования есть. Юридические.


 
Поросенок Винни-Пух ©   (2008-10-03 10:51) [21]

какие еще тонкости?


 
@!!ex ©   (2008-10-03 11:13) [22]

> [19] Ega23 ©   (03.10.08 10:12)

долгое. :)
Поэтому генерим рандомом xor ключ, шифруем с его помощью файлик. ключ шифруем RSA, AES или любым другим, ключ отдаем. зашифрованный xor ключ кладем рядом с файлом.
Если ты знаешь ключ, то расшифровываешь xor. что долго, но один раз. после чего с помощью xor ключа расшифровываешь данные.
в случае RSA вообще можно ключи по открытому каналу передавать.


 
Поросенок Винни-Пух ©   (2008-10-03 11:27) [23]

Поэтому генерим рандомом xor ключ, шифруем с его помощью файлик. ключ шифруем RSA, AES или любым другим, ключ отдаем.

получаем свой велосипедный PKI (асиметричное крипто на открытых ключах)


 
@!!ex ©   (2008-10-03 12:06) [24]

> [23] Поросенок Винни-Пух ©   (03.10.08 11:27)

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


 
Anatoly Podgoretsky ©   (2008-10-03 12:22) [25]

> @!!ex  (03.10.2008 11:13:22)  [22]

Если RSA то нафиг еще и XOR?


 
Vlad Oshin ©   (2008-10-03 12:32) [26]


> Если RSA то нафиг еще и XOR?

xor быстрее и к данным, RSA только к ключу


 
Поросенок Винни-Пух ©   (2008-10-03 13:01) [27]

я нигде и не утверждал, что это мое изобретение

я не про это. я про то, что похоже многие ставят винду только для того, чтобы появилась "полянка телепузиков" (дефолтные обои xp)ю После чего ишут замену проводнику, ie, блокноту, шедулеру и т.д.

а здесь вот предлагают свое крипто которое уже реализовано там.


 
Eraser ©   (2008-10-03 15:14) [28]

шифрование средствами крипто API
function EncryptData(ASessionKey: THandle; AData: TStream): Boolean;
var
 dwLength, bufLen: DWORD;
 bReturn: Boolean;
begin
 Result := False;
 if ASessionKey = 0 then
   Exit;
 EnterCriticalSection(csCrypto);
 try
   // Зашифруем поток AData
   dwLength := AData.Size;
   bufLen := AData.Size;

   // Определяем размер буффера для зашифрованых данных.
   // Для блочных шифров необходимо добавить примерно 10 байт.
   bReturn := CryptEncrypt(ASessionKey, 0, True, 0, nil, @dwLength,
     AData.Size);
   if not bReturn then
     Exit;

   AData.Size := dwLength + 20;

   // Скопируем незашифрованные данные в выделеный буффер.
   AData.Position := 0;
   dwLength := AData.Size;

   // Шифруем.
   bReturn := CryptEncrypt(ASessionKey, 0, True, 0, TMemoryStream(AData).Memory,
     @bufLen, AData.Size);
   if not bReturn then
     Exit;

   AData.Size := bufLen;
   AData.Position := 0;
   Result := True;
 finally
   LeaveCriticalSection(csCrypto);
 end;
end;

function DecryptData(ASessionKey: THandle; AData: TStream): Boolean;
var
 dwLength: DWORD;
 bReturn: Boolean;
begin
 Result := False;
 
 if ASessionKey = 0 then
   Exit;

 EnterCriticalSection(csCrypto);
 try
   dwLength := AData.Size;
   AData.Position := 0;

   // Расшифруем данные.
   bReturn := CryptDecrypt(ASessionKey, 0, True, 0, TMemoryStream(AData).Memory, @dwLength);
   if not bReturn then
     Exit;

   AData.Size := dwLength;
   AData.Position := 0;
   Result := True;
 finally
   LeaveCriticalSection(csCrypto);
 end;
end;

создание симметричного ключа

     bReturn := CryptGenKey(hProvParty2, dwAlgID,
       (dwSessionKeySize shl 16) or CRYPT_EXPORTABLE,
       @hSessionKey2);
     if not bReturn then
       Exit;


 
Jeer ©   (2008-10-03 17:12) [29]

И, Боже мой - как много букв произнесено,
И много-ль смысла в них привнесено ?
Помог-ли страждущему водой
Преподнесенный, и кипящий чайник, мной ?
(C) Jeer


 
blackman ©   (2008-10-05 19:32) [30]

Ерунда все это. Проще надо. Использовать например ARJ и с его помощью и шифровать и писать
http://articles.org.ru/docum/arj.php


 
RustB   (2008-10-06 17:25) [31]

ВСЕМ ОГРОМНОЕ СПАСИБО!!!


 
имя   (2009-03-27 08:51) [32]

Удалено модератором


 
имя   (2009-03-27 08:52) [33]

Удалено модератором


 
имя   (2009-03-27 09:12) [34]

Удалено модератором



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

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

Наверх




Память: 0.59 MB
Время: 0.016 c
15-1260708905
SergP
2009-12-13 15:55
2010.02.21
Как узнать Product key установленной винды XP


2-1261410151
Aleks
2009-12-21 18:42
2010.02.21
Динамически создавать каждый компонент или копировать объект


15-1260782130
Максимильянов
2009-12-14 12:15
2010.02.21
кодировка в Opera


2-1261222865
yantux
2009-12-19 14:41
2010.02.21
Как работает знак := для рекордов?


15-1260542319
TUser
2009-12-11 17:38
2010.02.21
Видеокарту никому не надо?