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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2013, 18:19   #1
Poltish
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 35
Восклицание Ошибка. Берём hex-код, шифруем hex-код, собираем всё в файл.

Всем добрый день Вопрос в следующем:
или лыжи не едут или у меня ещё мало опыта.
В общем решил написать крутой-супер-мега-шифратор файлов. Ну так, для практики. Проблема в том, что вроде бы всё сделал, а ничерта не работает

Вот код проекта:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, sSkinManager, StdCtrls, sEdit, sGroupBox, sButton, sMemo,
  ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    OpenDialog1: TOpenDialog;
    GroupBox1: TGroupBox;
    RichEdit1: TRichEdit;
    Label1: TLabel;
    Label3: TLabel;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CrKey: integer;
implementation

uses Unit2;

{$R *.dfm}
function SaveBinArrayToFile(AFileName:string; ABuf:array of byte):boolean;
var
  fs:TFileStream;
  n:integer;
begin

  fs:=TFileStream.Create(AFileName, fmCreate {fmOpenWrite});
  try
    fs.Position := 0;
    n := Length(ABuf);
    fs.Write(ABuf, n);
  finally
    fs.Free;
  end;
end;

//Алгоримт шифрования XOR
function CryptStr(Str: String): String;
var i: Integer;
    s: string;
begin
  for i:= 1 to Length(Str) do
    s := s + Chr((Ord(Str[i]) xor CrKey) mod 256);
  Result := s;
End;

// Открытие файла
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute = true then
begin
form1.Edit1.Text:= Opendialog1.FileName;
form1.RichEdit1.Lines.Add('Файл '+ExtractFIleName(OpenDialog1.FileName)+' был открыт в '+ timetostr(time)+'.');
form1.RichEdit1.Lines.Add('');
end;
CopyFile (PChar(Opendialog1.FileName), PChar(OpenDialog1.FileName + '.bak'), true);
if FileExists(OpenDIalog1.FileName) then  begin form1.RichEdit1.Lines.Add('Бэкап файла создан в '+ timetostr(time)); form1.RichEdit1.Lines.Add(''); end;
end;
//Шифрование файла
procedure TForm1.Button2Click(Sender: TObject);
var
f: file;
arr, arr1, buff: array of Byte;
Size, t, i: integer;

begin
if form1.Edit2.Text <> '' then
begin
AssignFile (f, OpenDialog1.FileName);
Reset (f,1);
Size:= Filesize(f);
SetLength(Arr,Size);
BlockRead(f,Arr[0],Size);
CloseFile(f);

CrKey:= strtoint(form1.Edit2.Text);

for t:= 0 to length (Arr) do
begin
    CryptStr (char(Arr[t]));
end;


if not SaveDialog1.Execute then exit;
SaveBinArrayToFile(SaveDialog1.FileName, Arr);

end else ShowMessage ('Введите пароль и повторите операцию!');
end;



end.
Открываю, читаю файл. Записываю всё в массив. Далее шифрую массив XOR-алгоритмом и массив (по-идее уже зашифрованный) перевожу снова в файл. Всё бы хорошо, да что там, всё даже работает. Только вот не правильно. Сохраняет тот же файл, который я открывал. Хотя массив вроде бы защифровал. В чём проблема, подскажите?
Poltish вне форума Ответить с цитированием
Старый 21.08.2013, 11:59   #2
Poltish
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 35
По умолчанию

Не CryptStr (char(Arr[t]));
А Arr[t]:= CryptStr (char(Arr[t]));
ну собственно всё и заработало
Poltish вне форума Ответить с цитированием
Старый 21.08.2013, 12:57   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Молодец, что нашли ошибку.

Исправьте еще и for t := 0 to length (Arr) - 1 do. Без -1 будет выход за границы массива.
Или замените на for t := 0 to High(Arr) do.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 21.08.2013 в 12:59.
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HEX и Delphi код цвета beegl Общие вопросы Delphi 2 04.01.2013 14:24
файл из text в hex AET Общие вопросы Delphi 29 31.10.2012 21:53
file->HEX HEX->BIN kakawkin Общие вопросы Delphi 1 25.04.2012 01:02
J2Me код Hello World где ошибка вроде всё правильно Tik-Tik Общие вопросы по Java, Java SE, Kotlin 2 30.08.2009 00:04
Поиск Hex данных в большом файл GanGSISoft Помощь студентам 6 03.07.2009 15:36