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

Вниз

RC4   Найти похожие ветки 

 
Biggelow   (2007-07-11 06:08) [0]

Семь лет не программировал на Delphi, понадобилось программу для шифрования в RC4 сделать. Мне нужно один файл(file1.txt) с помощью ключа зашифровать в другой(file2.txt). А тут какие-то TStream, а я знать не знаю что это . Может кто подскажет как это сделать пример, или где почитать?

///////////////////////////////////////////////////
///////////////////Шифр RC4////////////////////////
///////////////////////////////////////////////////

var
s: array [0..255] of Byte;
i,j: Byte;

//Инициализация S-Box"а
procedure InitRC4Cipher(key: ShortString);
var
k: array [0..255] of Byte;
t: Byte;
l: Cardinal;
i0,j0: Byte;

begin
for i0 := 0 to 255 do s[i0] := i0;

j0 := 1; l := Length(key);
for i0 := 0 to 255 do
begin
k[i0] := Ord(key[j0]);
if j0 = l then j0 := 0;
Inc(j0);
end;

for i0 := 0 to 255 do
begin
j0 := (j0 + k[i0] + s[i0]) mod 256;

t := s[i0];
s[i0] := s[j0];
s[j0] := t;
end;

i := 0;
j := 0;
end;

//Зашифровать конкретный символ
function GetRC4ByteCiphered(bt: Byte): Byte;
var
t: Byte;

begin
i := (i + 1) mod 256;
j := (j + s[i]) mod 256;

t := s[i];
s[i] := s[j];
s[j] := t;

t := (s[i] + s[j]) mod 256;

Result := bt XOR s[t];
end;

//Применить RC4 шифр к потоку данных
function ApplyRC4ToData(Data: TStream; var Buffer: TStream; key: ShortString): Boolean; stdcall;
var
i: Cardinal;
d: Byte;
pos: Cardinal;

begin
if (key = "")OR(Buffer = Data)OR(Buffer = nil)OR(Data = nil)OR(Data.Size = 0)OR(Buffer.Size <> 0) then
begin
Result := false;
Exit;
end;

pos := Data.Position;
Data.Position := 0;
Buffer.CopyFrom(Data,Data.Size);
Buffer.Position := 0;
Data.Position := 0;

try
InitRC4Cipher(key);
for i := 0 to Buffer.Size-1 do
begin
Data.ReadBuffer(d,1);
d := GetRC4ByteCiphered(d);
Buffer.WriteBuffer(d,1);
end;
except
Result := false;
Exit;
end;

Data.Position := pos;
Buffer.Position := 0;

Result := true;
end;

///////////////////////////////////////////////////
///////////////////////////////////////////////////
///////////////////////////////////////////////////


 
Джо ©   (2007-07-11 06:56) [1]

> ). А тут какие-то TStream, а я знать не знаю что это . Может
> кто подскажет как это сделать пример, или где почитать?

Да все так же, как и семь лет назад. TStream + F1.


 
SlymRO ©   (2007-07-11 07:36) [2]

Source:=TFileStream.Create("file1.txt",fmOpen);
Dest:=TFileStream.Create("file2.txt",fmCreate);
ApplyRC4ToData(Source,Dest,"password");
dest.Free;
Source.free;


 
Инс ©   (2007-07-11 10:14) [3]

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=50330



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

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

Наверх




Память: 0.47 MB
Время: 0.025 c
15-1183655714
@!!ex
2007-07-05 21:15
2007.08.05
НЕ смотрится DVD.


1-1179996370
SergeyG
2007-05-24 12:46
2007.08.05
В реальном времени нужно рисовать график(и) данных.


15-1183887525
ArtemESC
2007-07-08 13:38
2007.08.05
Есть ли какие-нибудь форумы где можно задавать ...


15-1183614347
Qzzma
2007-07-05 09:45
2007.08.05
Книги по Delphi Pascal для "девушек"


9-1156047825
cxvxc
2006-08-20 08:23
2007.08.05
дайте 3д модель