Rc4

Тема в разделе "Delphi - Система", создана пользователем Biggelow, 11 июл 2007.

Статус темы:
Закрыта.
  1. Biggelow

    Biggelow Гость

    Семь лет не программировал на 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) mod 256;

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

    t := (s + 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;

    ///////////////////////////////////////////////////
    ///////////////////////////////////////////////////
    ///////////////////////////////////////////////////
     
  2. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    TStream и всё остальное описано в хелпе по Делфи.
     
Статус темы:
Закрыта.

Поделиться этой страницей