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

Шифрование и дешифровка .ini файла

08.03.2016, 23:16. Показов 4611. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане. Столкнулся с необходимостью шифровать данные копируемые в .ini файл, полазив по данному форуму нашел подходящий мне шифровальщик:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function Crypt(s:string;code:boolean):string;
const
   Pas=10;
var
  i,Delta,Res:integer;
begin
  Result:='';
  for i:=1 to Length(s) do
  begin
    Delta:=((i xor Pas) mod (256-32));
    if code then
      Res:=((ord(s[i])+Delta) mod (256-32))+32
    else
    begin
      Res:=ord(s[i])-Delta-32;
      if Res<32 then
        Res:=Res+256-32;
    end;
      Result:=Result+chr(Res);
  end;
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
  if messagedlg('Выйти?',
mtconfirmation, [mbYes, mbNo], 0) = mrNo then
canclose := false else
begin
  if messagedlg('Сохранить?',
mtconfirmation, [mbYes, mbNo], 0) = mrYes then
 begin
 Inifile:=TIniFile.Create(Application.ExeName+'.ini');
 IniFile.WriteString('1','1',Crypt(Floattostr(Exion), true));
 IniFile.WriteString('1','2',Crypt(Floattostr(Exion1), true));
 IniFile.WriteString('1','3',Crypt(Floattostr(Bens),true));
 IniFile.WriteString('1','4',Crypt(Floattostr(Bens1),true));
 IniFile.WriteString('1','5',Crypt(Floattostr(B),true));
 IniFile.WriteString('1','6',Crypt(Floattostr(A), true));
 IniFile.WriteString('1','7',Crypt(Floattostr(C),True));
 IniFile.WriteString('1','8',Crypt(Floattostr(Ener),true));
 IniFile.WriteString('1','9',Crypt(Floattostr(Ener1),true));
 IniFile.WriteString('1','10',Crypt(Floattostr(Sener),true));
 IniFile.WriteString('1','11',Crypt(Floattostr(Sbar),true));
 IniFile.WriteString('1','12',Crypt(Floattostr(points),true));
 IniFile.WriteString('2','13',Crypt(Floattostr(Unit2.X),true));
 IniFile.WriteString('2','14',Crypt(Floattostr(Unit2.Y),true));
 IniFile.WriteString('2','15',Crypt(Floattostr(Unit2.Z),true));
 IniFile.WriteString('2','16',Crypt(Floattostr(Unit2.Br),true));
 IniFile.WriteString('3','17',Crypt(Floattostr(Unit3.I),true));
 IniFile.WriteString('3','22',Crypt(Floattostr(Unit3.SX),true));
 IniFile.WriteString('4','23',Crypt(Floattostr(Unit4.I),true));
 IniFile.WriteString('4','27',Crypt(Floattostr(Unit4.ENX),true));
 IniFile.WriteString('5','28',Crypt(Floattostr(Unit5.I),true));
 IniFile.WriteString('5','33',Crypt(Floattostr(Unit5.BX),true));
 IniFile.WriteString('6','34',Crypt(Floattostr(Unit6.I),true));
 IniFile.WriteString('8','38',Crypt(Floattostr(Unit8.shax),true));
 IniFile.WriteString('8','39',Crypt(Floattostr(Unit8.shay),true));
 IniFile.WriteString('8','40',Crypt(Floattostr(Unit8.nefx),true));
 IniFile.WriteString('8','41',Crypt(Floattostr(Unit8.nefy),true));
 IniFile.WriteString('8','42',Crypt(Floattostr(Unit8.engx),true));
 IniFile.WriteString('8','43',Crypt(Floattostr(Unit8.engy),true));
 IniFile.WriteString('8','44',Crypt(Floattostr(Unit8.unitx),true));
 IniFile.Free;
 end;
  end;
  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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
procedure TForm1.FormCreate(Sender: TObject);
begin
Inifile:=TIniFile.Create(Application.ExeName+'.ini');
 Exion:=Inifile.ReadFloat('1','2',Exion);
 Exion:=StrToFloat(crypt(FloattoStr(exion), false));
 Exion1:=Inifile.Readinteger('1','2',Exion1);
 Exion1:=StrToInt(crypt(FloattoStr(exion1), false));
 Bens:=Inifile.ReadFloat('1','3',Bens);
 Bens:=StrToFloat(crypt(FloattoStr(Bens), false));
 Bens1:=Inifile.Readinteger('1','4',Bens1);
 Bens1:=StrToInt(crypt(FloattoStr(Bens1), false));
 B:=Inifile.ReadFloat('1','5',B);
 B:=StrToFloat(crypt(FloattoStr(B), false));
 A:=Inifile.ReadFloat('1','6',A);
 A:=StrToFloat(crypt(FloattoStr(A), false));
 C:=Inifile.Readinteger('1','7',C);
 C:=StrToInt(crypt(FloattoStr(C), false));
 Ener:=Inifile.Readinteger('1','8',Ener);
 Ener:=StrToInt(crypt(FloattoStr(Ener), false));
 Ener1:=Inifile.Readinteger('1','9',Ener1);
 Ener1:=StrToInt(crypt(FloattoStr(Ener1), false));
 Sener:=Inifile.Readinteger('1','10',Sener);
 Sener:=StrToInt(crypt(FloattoStr(Sener), false));
 Sbar:=Inifile.Readinteger('1','11',Sbar);
 Sbar:=StrToInt(crypt(FloattoStr(Sbar), false));
 points:=Inifile.ReadFloat('1','12',Points);
 points:=StrToFloat(crypt(FloattoStr(Points), false));
 Unit2.X:=Inifile.Readinteger('2','13',Unit2.x);
 Unit2.X:=StrToInt(crypt(FloattoStr(Unit2.X), false));
 Unit2.Y:=Inifile.Readinteger('2','14',Unit2.y);
 Unit2.Y:=StrToInt(crypt(FloattoStr(Unit2.Y), false));
 Unit2.Z:=Inifile.Readinteger('2','15',Unit2.z);
 Unit2.Z:=StrToInt(crypt(FloattoStr(Unit2.Z), false));
 Unit2.Br:=Inifile.Readinteger('2','16',Unit2.br);
 Unit2.Br:=StrToInt(crypt(FloattoStr(Unit2.BR), false));
 Unit3.I:=Inifile.ReadInteger('3','17',Unit3.I);
 Unit3.I:=StrToInt(crypt(FloattoStr(Unit3.I), false));
 Unit3.SX:=Inifile.ReadFloat('3','22',Unit3.sx);
 Unit3.SX:=StrToInt(crypt(FloattoStr(Unit3.SX), false));
 Unit4.I:=Inifile.Readinteger('4','23',Unit4.i);
 Unit4.I:=StrToInt(crypt(FloattoStr(Unit4.I), false));
 Unit4.ENX:=Inifile.Readinteger('4','27',Unit4.enx);
 Unit4.ENX:=StrToInt(crypt(FloattoStr(Unit4.Enx), false));
 Unit5.I:=Inifile.Readinteger('5','28',Unit5.i);
 Unit5.I:=StrToInt(crypt(FloattoStr(Unit5.I), false));
 Unit5.BX:=Inifile.Readinteger('5','33',Unit5.bx);
 Unit5.BX:=StrToInt(crypt(FloattoStr(Unit5.bx), false));
 Unit6.I:=Inifile.Readinteger('6','34',Unit6.i);
 Unit6.I:=StrToInt(crypt(FloattoStr(Unit6.I), false));
 Unit8.shax:=Inifile.Readinteger('8','38',Unit8.shax);
 Unit8.Shax:=StrToInt(crypt(FloattoStr(Unit8.shax), false));
 Unit8.shay:=Inifile.Readinteger('8','39',Unit8.shay);
 Unit8.shay:=StrToInt(crypt(FloattoStr(Unit8.shay), false));
 Unit8.nefx:=Inifile.Readinteger('8','40',Unit8.nefx);
 Unit8.Nefx:=StrToInt(crypt(FloattoStr(Unit8.nefx), false));
 Unit8.nefy:=Inifile.Readinteger('8','41',Unit8.nefy);
 Unit8.Nefy:=StrToInt(crypt(FloattoStr(Unit8.nefy), false));
 Unit8.engx:=Inifile.Readinteger('8','42',Unit8.engx);
 Unit8.Engx:=StrToInt(crypt(FloattoStr(Unit8.engx), false));
 Unit8.engy:=Inifile.Readinteger('8','43',Unit8.engy);
 Unit8.engy:=StrToInt(crypt(FloattoStr(Unit8.engy), false));
 Unit8.unitx:=Inifile.Readinteger('8','44',Unit8.unitx);
 Unit8.Unitx:=StrToInt(crypt(FloattoStr(Unit8.unitx), false));
 IniFile.Free;
Помогите второй день не могу разобраться уже с этим, проект встал(((

P.S. Если в сообщении об ошибке нажать "остановить" ссылается на строку

Delphi
1
Exion:=StrToFloat(crypt(FloattoStr(exion), false));
P.P.S. Без шифрования всё работает
Миниатюры
Шифрование и дешифровка .ini файла  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2016, 23:16
Ответы с готовыми решениями:

Шифрование-Дешифровка ini-файлов (IdEncoderXXE & IdDecoderXXE и не только)
Здравствуйте уважаемые форумчане. У меня простая программа, которая выводит тестовые вопросы из...

Шифрование ini-файла
Где можно все узнать про шифрование файла? У меня ini файл, там данные элементов программы. Хочу...

Шифрование / дешифровка определенного текста (желательно алгоритмом RC4)
кто нибудь может залить прогу которая может шифровать и дешифровать определенный тест и...

Шифрование и дешифровка файла с AES 256
Доброго времени суток, дорогие телепаты. Заранее оговорюсь: я в криптографии совсем зеленый,...

11
3218 / 2361 / 540
Регистрация: 11.09.2009
Сообщений: 8,604
09.03.2016, 00:22 2
А ничего, что перед "дешифровкой" вы создаёте файл?
Цитата Сообщение от SILEDKA112 Посмотреть сообщение
Delphi
1
2
Inifile:=TIniFile.Create(Application.ExeName+'.ini'); 
Exion:=Inifile.ReadFloat('1','2',Exion);
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
09.03.2016, 00:28 3
Лучший ответ Сообщение было отмечено SILEDKA112 как решение

Решение

А с чего этот ты записанное через WriteString значение читаешь как ReadFloat? Чтобы там оказалось представление вещественного числа, строку нужно сначала дешифровать:
Delphi
1
 Exion:=StrToFloat(crypt(Inifile.ReadString('1','2',''), false));
Добавлено через 40 секунд
i8085, если файл уже был - от просто откроется, ничего страшного.
1
0 / 0 / 1
Регистрация: 11.08.2015
Сообщений: 18
09.03.2016, 00:38  [ТС] 4
Цитата Сообщение от i8085 Посмотреть сообщение
А ничего, что перед "дешифровкой" вы создаёте файл?
Delphi
1
Inifile:=TIniFile.Create(Application.ExeName+'.ini');
TIniFile.Create -
Если файл с таким именем существует, то он откроется для чтения, а если нет - то он будет создан.
цитата из учебника по Delphi

Добавлено через 8 минут
Цитата Сообщение от volvo Посмотреть сообщение
А с чего этот ты записанное через WriteString значение читаешь как ReadFloat? Чтобы там оказалось представление вещественного числа, строку нужно сначала дешифровать:
Можно по подробнее? Хотя бы целиком всю переменную, так как с данным кодом, при первом запуске (когда файла ini еще нет), какое значение примет переменная, то которое прописано в коде по дефолту или то, что написано после второй запятой(пустое)? -> Inifile.ReadString('1','2','')
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
09.03.2016, 00:40 5
Ну я же написал, как именно читать строку из файла и конвертировать ее в переменную. Записывается в файл нормально, вот читалось у тебя неправильно. Видишь, у меня в коде - читаешь строку, дешифруешь ее, и только потом результат дешифровки конвертируешь в нужный тип.
0
0 / 0 / 1
Регистрация: 11.08.2015
Сообщений: 18
09.03.2016, 00:45  [ТС] 6
Цитата Сообщение от volvo Посмотреть сообщение
Ну я же написал, как именно читать строку из файла и конвертировать ее в переменную. Записывается в файл нормально, вот читалось у тебя неправильно. Видишь, у меня в коде - читаешь строку, дешифруешь ее, и только потом результат дешифровки конвертируешь в нужный тип.
За это спасибо, понял в чем дело, но вопрос в другом у меня)
Если файл ini еще не создан, базовые значения не потеряются(в большинстве переменных они не равны 0 и их значения указаны в конце кода перед end.)?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
09.03.2016, 00:48 7
Какое отношение к ДЕшифровке это имеет? У тебя же шифруется все нормально? Значит, файл уже создан.

Если не сохранить файл - то все значения, которые были изменены, будут утеряны (базовые, которыми переменные инициализировались в коде - нет, они в любом случае останутся, и при следующем запуске просто все опять ими же, базовыми, проинициализируется)
0
0 / 0 / 1
Регистрация: 11.08.2015
Сообщений: 18
09.03.2016, 00:57  [ТС] 8
Цитата Сообщение от volvo Посмотреть сообщение
Какое отношение к ДЕшифровке это имеет? У тебя же шифруется все нормально? Значит, файл уже создан.
Если не сохранить файл - то все значения, которые были изменены, будут утеряны (базовые, которыми переменные инициализировались в коде - нет, они в любом случае останутся)
При отсутсвии ini файла ошибка
Миниатюры
Шифрование и дешифровка .ini файла  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
09.03.2016, 01:36 9
Лучший ответ Сообщение было отмечено SILEDKA112 как решение

Решение

Delphi
1
2
3
4
5
6
7
procedure TForm1.FormCreate(Sender: TObject);
begin
  if not FileExists(Application.ExeName+'.ini') then exit; // нет файла - неоткуда читать, уходим из обработчика
 
  // дальше - все то, что было:
  Inifile:=TIniFile.Create(Application.ExeName+'.ini');
  // ...
1
0 / 0 / 1
Регистрация: 11.08.2015
Сообщений: 18
09.03.2016, 01:51  [ТС] 10
Цитата Сообщение от volvo Посмотреть сообщение
1
2
3
4
5
6
7
procedure TForm1.FormCreate(Sender: TObject);
begin
* if not FileExists(Application.ExeName+'.ini') then exit; // нет файла - неоткуда читать, уходим из обработчика
// дальше - все то, что было:
* Inifile:=TIniFile.Create(Application.ExeName+'.ini');
* // ...
Спасибо большое, всё заработало :-)
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
09.03.2016, 02:17 11
Цитата Сообщение от SILEDKA112 Посмотреть сообщение
Столкнулся с необходимостью шифровать данные копируемые в .ini файл
Сам по дури столкнулся или кто-то подтолкнул?
0
0 / 0 / 1
Регистрация: 11.08.2015
Сообщений: 18
09.03.2016, 02:29  [ТС] 12
Цитата Сообщение от northener Посмотреть сообщение
Сам по дури столкнулся или кто-то подтолкнул?
проект на олимпиаду)
0
09.03.2016, 02:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2016, 02:29
Помогаю со студенческими работами здесь

Шифрование и дешифровка
Вот,задачка :gsorry: Организовать процессы шифрования и дешифровки записью символов текста в...

Шифрование и дешифровка текста
Доброго времени суток! Я начинаю изучать Python и в целях обучения решил написать программу для...

Шифрование и дешифровка AES через OpenSSL
Всем привет. Попытался применить для шифрования следующий код: unsigned char*...

Шифрование и дешифровка - реализовать ввод с клавиатуры
#include &lt;windows.h&gt; #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; int main() {...


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

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