Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2009, 09:41   #1
Alexteks
Новичок
Джуниор
 
Регистрация: 05.05.2009
Сообщений: 1
По умолчанию Шифрование алгоритмом RC4

не могу понять где ошибка шифрует и расшифровывает правильно только несколько строк а остальные как-будто обрезает. помогите пожалуйста кому не в лом разобраться с этой проблемой а то курсач горит Alexteks@mail.ru
Код:
unit frmMain_;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TfrmMain = class(TForm)
memText: TMemo;
btnOpenFile: TButton;
btnEncDec: TButton;
btnSaveToFile: TButton;
btnClearText: TButton;
lblPathToFile: TLabel;
edtPathToFile: TEdit;
odOpenFile: TOpenDialog;
SaveDialog1: TSaveDialog;

procedure btnOpenFileClick(Sender: TObject);
procedure btnSaveToFileClick(Sender: TObject);
procedure btnEncDecClick(Sender: TObject);
procedure btnClearTextClick(Sender: TObject);

function ApplyRC4ToText(tx: AnsiString): AnsiString;
function InitRC4Cipher: Boolean;
function GetRC4CharCiphered(ch: AnsiChar): AnsiChar;

private
{ Private declarations }
public
{ Public declarations }
end;

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

implementation
//uses frmProgress_;
{$R *.dfm}
//Инициализация S-бокса в зависимости от ключа

function TfrmMain.InitRC4Cipher: Boolean;
var
x: AnsiString;
k: array [0..255] of Byte;
t: Byte;
l: Cardinal;
i0,j0: Byte;

begin
x := InputBox('RC4','Введите ключ','');

if x = '' then
begin
ShowMessage('Вы не ввели ключ.');
Result := false;
Exit;
end;

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

j0 := 1; l := sizeof(x);
for i0 := 0 to 255 do
begin
k[i0] := Ord(x[j0]);
if j0 = l then j0 := 1;
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;
Result := true;
end;

//Шифрование конкретного символа
function TfrmMain.GetRC4CharCiphered(ch: AnsiChar): AnsiChar;
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 := Chr(Ord(ch) XOR s[t]);
end;

//функция шифрования всего текста
function TfrmMain.ApplyRC4ToText(tx: AnsiString): AnsiString;
var
i: Cardinal;
x: AnsiString;

begin
if InitRC4Cipher = false then
begin
Result := tx;
Exit;
end;

Result := '';
for i := 1 to Length(tx) do
Result := Result + GetRC4CharCiphered(tx[i]);
end;

//Открыть файл
procedure TfrmMain.btnOpenFileClick(Sender: TObject);
begin
if odOpenFile.Execute = false then Exit;

memText.ReadOnly := false;
edtPathToFile.Text := odOpenFile.FileName;

memText.Lines.LoadFromFile(edtPathToFile.Text);

end;
//Сохраняем в файл

procedure TfrmMain.btnSaveToFileClick(Sender: TObject);
begin
memText.Lines.SaveToFile(odOpenFile.FileName);
ShowMessage('Сохранение прошло успешно');

end;
//Шифрование данных

procedure TfrmMain.btnEncDecClick(Sender: TObject);
begin
if memText.Lines.Text <> '' then
memText.Lines.Text := ApplyRC4ToText(memText.Lines.Text)
else
begin
ShowMessage('Поле ввода пусто.');
Exit;
end;

end;
//Вывод исходного текста
procedure TfrmMain.btnClearTextClick(Sender: TObject);
begin

if memText.Lines.Text <> '' then
memText.Lines.LoadFromFile(edtPathToFile.Text)
else
ShowMessage('Нужно открыть сначала файл!!!');


end;

end.

Последний раз редактировалось KORN; 05.05.2009 в 10:40.
Alexteks вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с алгоритмом построения сегмента DjDizzy Помощь студентам 4 10.02.2009 20:46
помогите с алгоритмом Фибоначчи kardan Помощь студентам 8 01.04.2008 20:22
Помогите с алгоритмом (Алгебра и геометрия) Illia Общие вопросы C/C++ 9 02.01.2008 23:15
RC4 Biggelow Общие вопросы Delphi 9 12.07.2007 13:48