Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.06.2018
Сообщений: 6
1

Ошибка при шифровании данных

27.06.2018, 11:21. Показов 705. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm2.btnEncryptClick(Sender: TObject);
var
 
  SourceStream, DestStream: TFileStream;
  i:integer;
spisok:tstringlist;
begin
spisok:=Tstringlist.Create;
spisok.LoadFromFile('res.txt');
for i := 0 to spisok.Count -1 do
EncryptFile(spisok.strings[i], ExtractFilePath(ParamStr(0)) + 'encrypted' + ExtractFileExt(spisok.strings[i]), 'пароль') // шифрование
 
end;

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function TForm2.EncryptFile(Source, Dest, Password: string): Boolean;
var
  SourceStream, DestStream: TFileStream;
begin
  Result := True;
  try
    SourceStream := TFileStream.Create(Source, fmOpenRead); // поток для файла, который будем шифровать
    try
      DestStream := TFileStream.Create(Dest, fmCreate); // поток файла для зашифрованых данных
      try
        DCP_rijndael1.InitStr(Password, TDCP_sha1); // инициализируем ключ (считаем SHA1 для ключа)
        DCP_rijndael1.EncryptStream(SourceStream, DestStream, SourceStream.Size); // шифруем
        DCP_rijndael1.Burn; // "сжигаем" данные о ключе
      finally
        FreeAndNil(DestStream);
      end;
    finally
      FreeAndNil(SourceStream)
    end;
  except
    Result := False;
  end;
end;
файл res.txt следующего содержимого:
Код
C:\Users\Руслан\Desktop\test\XblGameSaveExt.dll
C:\Users\Руслан\Desktop\test\XblGameSaveProxy.dll
C:\Users\Руслан\Desktop\test\XblGameSaveTask.exe
C:\Users\Руслан\Desktop\test\XboxGipRadioManager.dll
C:\Users\Руслан\Desktop\test\xboxgipsvc.dll
C:\Users\Руслан\Desktop\test\xboxgipsynthetic.dll
C:\Users\Руслан\Desktop\test\XboxNetApiSvc.dll
....


Приведенный мной код не хочет работать с множеством строк. Видно процедура шифрования не успевает пошифровать прошлый файл как цикл подает новый.
Как это пофиксить ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2018, 11:21
Ответы с готовыми решениями:

ошибка в шифровании
procedure TForm_2.Edit1Click(Sender: TObject); var st,st2,n,k,i:integer; j:string; begin ...

математические алгоритмы при шифровании
Кто нибудь, может привести самый простой и понятный Пример "математических алгоритмом при...

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

Ошибка: Operator not applicable to this operand type в шифровании RSA
Вот часть кода шифрования RSA, эта часть переводит текст из Memo1 в численный аналог и эти числа...

8
Модератор
9261 / 6039 / 2379
Регистрация: 21.01.2014
Сообщений: 25,803
Записей в блоге: 3
27.06.2018, 12:03 2
А как Вы видите, что "не успевает пошифровать"? В чем это выражается?
0
0 / 0 / 0
Регистрация: 27.06.2018
Сообщений: 6
27.06.2018, 12:17  [ТС] 3
Цитата Сообщение от D1973 Посмотреть сообщение
А как Вы видите, что "не успевает пошифровать"? В чем это выражается?
просто не шифрует, а при закрытии программы вылетает
Ошибка при шифровании данных


хотя с одним файлов справляется хорошо
0
156 / 108 / 36
Регистрация: 27.06.2018
Сообщений: 253
27.06.2018, 14:52 4
Очевидно, проблема в переинициализации объекта. Либо создавать новый TDCP_rijndael перед каждым шифрованием, либо сбрасывать его (reset)
0
0 / 0 / 0
Регистрация: 27.06.2018
Сообщений: 6
27.06.2018, 20:59  [ТС] 5
Цитата Сообщение от Human_foot Посмотреть сообщение
Очевидно, проблема в переинициализации объекта. Либо создавать новый TDCP_rijndael перед каждым шифрованием, либо сбрасывать его (reset)
подскажите с кодом ?
0
156 / 108 / 36
Регистрация: 27.06.2018
Сообщений: 253
27.06.2018, 22:47 6
Перед
Delphi
1
DCP_rijndael1.InitStr(Password, TDCP_sha1); // инициализируем ключ (считаем SHA1 для ключа)
сделать
Delphi
1
DCP_rijndael1 := TDCP_rijndael.create(...
В конце удалить, да хоть через FreeAndNil

где DCP_rijndael1 - не кинутый на форму компонент, а локальная переменная типа TDCP_rijndael
0
0 / 0 / 0
Регистрация: 27.06.2018
Сообщений: 6
28.06.2018, 12:42  [ТС] 7
Цитата Сообщение от Human_foot Посмотреть сообщение
1
Delphi
1
DCP_rijndael1 := TDCP_rijndael.create(...
а после ".create(... что писать ?
0
0 / 0 / 0
Регистрация: 27.06.2018
Сообщений: 6
03.07.2018, 12:50  [ТС] 8
понял
Delphi
1
2
3
4
5
DCP_rijndael1 := TDCP_rijndael.Create(Self);
        DCP_rijndael1.InitStr(Password, TDCP_sha1); // инициализируем ключ (считаем SHA1 для ключа)
        DCP_rijndael1.EncryptStream(SourceStream, DestStream, SourceStream.Size); // шифруем
        DCP_rijndael1.Burn; // "сжигаем" данные о ключе
        DCP_rijndael1.Free;
только это не помогло
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
03.07.2018, 13:10 9
Ну может стримы поставить position:=0 ?
0
03.07.2018, 13:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.07.2018, 13:10
Помогаю со студенческими работами здесь

Не ставятся пробелы между словами при шифровании Цезаря
Шифр Цезаря. Не ставятся пробелы между словами когда шифруешь текст. unit Unit1; interface ...

Ошибка при шифровании
Приветствую обитателей сего форума. Недавно сел решать задачку, и вроде бы все получилось, но -...

Ошибка "Method call expected" при шифровании RSA
private final static BigInteger one = new BigInteger("1"); private final static...

ошибка в шифровании
Пытаюсь сделать шифрование через SLL, проблема в том, что если задавать строку для шифрования...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru