Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.007 c
4-1229348213
Wadimka
2008-12-15 16:36
2010.02.21
Есть чужое приложение и есть на нем непонятные кнопки


15-1259928321
ВадимММ
2009-12-04 15:05
2010.02.21
Сужение цветов


4-1229418864
belmol
2008-12-16 12:14
2010.02.21
FTRAPI.dll ftrScanAPI.dll


2-1261409951
JohnKorsh
2009-12-21 18:39
2010.02.21
API для беспроводных сетей.


11-1190008553
Nikfel
2007-09-17 09:55
2010.02.21
Как добавить изображение в TKolPopupMenu.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский