![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 06.07.2007
Сообщений: 4
|
![]()
Семь лет не программировал на 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; /////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// |
![]() |
![]() |
![]() |
#2 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]()
Пихаешь исходный файл в Data, в buffer оказывается шифрованный
Код:
пыщь
Последний раз редактировалось JTG; 06.07.2007 в 11:16. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 06.07.2007
Сообщений: 4
|
![]()
не работает говорит:
[Error] rc4.pas(187): Undeclared identifier: 'LoadFromFile' [Error] rc4.pas(189): Undeclared identifier: 'SaveToFile' |
![]() |
![]() |
![]() |
#4 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]()
ХЗ, не помню я у какого из стримов те методы есть
может так var Data, Buffer : TMemoryStream;
пыщь
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 06.07.2007
Сообщений: 4
|
![]()
делаю так:
var Data14, Buffer14 : TMemoryStream; key777: ShortString; procedure TForm1.Button3Click(Sender: TObject); begin Data14 := TMemoryStream.Create; Buffer14 := TMemoryStream.Create; key777:='434'; Data14.LoadFromFile('file1.txt'); ApplyRC4ToData(Data14; Buffer14; key777); Buffer14.SaveToFile('file2.txt'); Buffer14.free; Data14.free; end; а он мне пишет: [Error] rc4.pas(188): Statement expected, but expression of type 'ShortString' found [Error] rc4.pas(188): Not enough actual parameters |
![]() |
![]() |
![]() |
#6 |
Регистрация: 06.07.2007
Сообщений: 4
|
![]()
Ну что мне никто не поможет?
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 26.06.2007
Сообщений: 22
|
![]()
var
f:text; data:tstrings; begin data:=tstringlist.Create(); data.LoadFromFile(edit1.text); ... {изменяеш текст, шифруешь} ... data.SaveToFile(edit2.text); data.free; end;
Дорогу одолеет идущий.
http://www.krypton.ucoz.net "Кто владеет информацией - тот владеет миром!" Уинстон Черчиль (Натан Ротшильд, Френсис Бекон) |
![]() |
![]() |
![]() |
#8 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]()
Ну для текста как раз подойдёт
Not enough actual parameters то ж вроде когда вызов функции с меньшим кол-вом параметров, чем обьявлено в interface
пыщь
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 23.05.2007
Сообщений: 151
|
![]()
Нужно вызвать процедуру, которая сама по себе создавалась как обработчик нажатия кнопки - procedure TMainForm.btOplataClick(Sender: TObject); . Я ее вызываю также из некого участка в другом модуле:
Код:
Not enough actual parameters Модуль, где сама процедура описана подключен используя uses. |
![]() |
![]() |
![]() |
#10 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]()
Блин, описана как TMainForm.btOplataClick(Sender: TObject);
а ты её вызываешь без параметров? Естесно Not enough actual parameters (можно и не вызывать эту функцию, используй метод click например)
пыщь
Последний раз редактировалось JTG; 12.07.2007 в 13:54. |
![]() |
![]() |