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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2012, 19:15   #1
TorrentTor
Форумчанин
 
Аватар для TorrentTor
 
Регистрация: 02.11.2011
Сообщений: 105
По умолчанию Не могу считать зашифрованных параметр с ini файла

Добрый вечер всем!
Есть проблема небольшая:
Шифрую xor-ом пароль и записываю в ини файл, получаю - шифр он даже не отображается при копировании сюда, ну да ладно. (Н7)перед Н есть еще квадратик =)

Так вот не получается считать его обратно и расшифровать читает без этого квадрата и соответственно получаю не то.

Шифрование
Код:
function TVhod.Crypt(varStr: AnsiString): AnsiString;
var
 k: integer;
 s: AnsiString;
begin
   RandSeed:=100;
   s:=varStr;
   for k:=1 to Length(s) do
    s[k]:=ansichar(byte(s[k]) xor (Random(255)+1));

 Crypt:=s;
end;
Считывание.
Код:
var ini: TIniFile;
begin
  try
    Module.MyConnection1.Disconnect;
    ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Options.ini');
    Module.MyConnection1.Server:=ini.ReadString('Connect','ip','127.0.0.1');
    Module.MyConnection1.Username:=ini.ReadString('Connect','login','root');
    Module.MyConnection1.Password:=Crypt(ini.ReadString('Connect','pas','123'));
    Module.MyConnection1.Port:=ini.ReadInteger('Connect','port',3306);
    Module.MyConnection1.Database:=ini.ReadString('Connect','bd','ebup');
    Module.MyConnection1.Connect;
  except
  end;
  ini.Free;
  if Module.MyConnection1.Connected then
  else Application.MessageBox('Невозможно подключится к серверу, Пожайлуста проверьте настройки подключения','Ошибка подключения',MB_OK);
Файл приложил, txt сам поставил чтобы загрузить можно было так он ini
Жду идей =)
Вложения
Тип файла: txt Options.txt (148 байт, 148 просмотров)

Последний раз редактировалось TorrentTor; 19.04.2012 в 19:17.
TorrentTor вне форума Ответить с цитированием
Старый 19.04.2012, 19:32   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ReadBinaryStream и WriteBinaryStream для чтения-записи двоичных данных. Или преобразование в символьный вид перед записью (16-ричн, Base64) и обратная операция после чтения
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.04.2012, 20:23   #3
TorrentTor
Форумчанин
 
Аватар для TorrentTor
 
Регистрация: 02.11.2011
Сообщений: 105
По умолчанию

Попробовал так запись:
Код:
...
    str: TStringStream;
... 
str.WriteString(Vhod.Crypt(PASedit.Text));
ini.WriteBinaryStream('Connect','pas',str);
...

чтение
Код:
Module.MyConnection1.Password:=Vhod.Crypt(str.ReadString(1));
Вообще получился дикий ужас, видимо что-то делаю не так, можно слегка подробнее?
С преобразованием наверно легче будет ток я вообще не понял о каком преобразовании идет речь.
TorrentTor вне форума Ответить с цитированием
Старый 19.04.2012, 21:45   #4
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Слегка можно:
1. Где вызов ReadBinaryStream при расшифровании?
2. Какое вообще расшифрование при алгоритме, в котором ключ рандомный? Ну и расшифруешь ты уже другим ключом, или ты считаешь, что рандом тебе константы выдает?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 19.04.2012, 22:01   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

3D Hunter, RandSeed:=100 заставляет каждый раз генерировать одну и ту же псевдослучайную последовательность в рамках одного диапазона, поэтому с расшифровкой все в норме
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.04.2012, 22:14   #6
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Сорри, не знал. Но алгоритм случайного выбора зависит еще и от железа, так что Random при том же RandSeed на других компах будет выдавать по идее другие числа. Или я ошибаюсь?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 19.04.2012, 22:27   #7
TorrentTor
Форумчанин
 
Аватар для TorrentTor
 
Регистрация: 02.11.2011
Сообщений: 105
По умолчанию

Да дело даже не в шифровании и расшифровывании, это просто переделать и на одно слово =)
Дело в считывании этого шифра с ини файла, то ли символ там не печатаемый то ли еще что, в общем на этой мелочи я стопорюсь =(
TorrentTor вне форума Ответить с цитированием
Старый 19.04.2012, 22:28   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сорри, не знал. Но алгоритм случайного выбора зависит еще и от железа, так что Random при том же RandSeed на других компах будет выдавать по идее другие числа. Или я ошибаюсь?
зависит от алгоритма, часто стандартные средства расчитываются по простой формуле с одним параметром всего(тот самый Seed)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.04.2012, 22:58   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var inif: TIniFile;
    Stream: TMemoryStream;
    s: String;

 {Запись}
  s:=#14#15#16;
  Stream:=TMemoryStream.Create;
  Stream.Write(s[1],Length(s));
  inif.WriteBinaryStream('aaa','bbb',Stream);
  Stream.Free;

 {Чтение}
  Stream:=TMemoryStream.Create;
  inif.ReadBinaryStream('aaa','bbb',Stream);
  SetLength(s,Stream.Size);
  Stream.Position:=0;
  Stream.Read(s[1],Stream.Size);
  Stream.Free;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 19.04.2012 в 23:02.
Аватар вне форума Ответить с цитированием
Старый 19.04.2012, 23:41   #10
TorrentTor
Форумчанин
 
Аватар для TorrentTor
 
Регистрация: 02.11.2011
Сообщений: 105
По умолчанию

Попробовал сделать так как вы посоветовали:

Код:
begin
  s:=Vhod.Crypt(PASedit.Text);
  ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Options.ini');
  stream:=TMemoryStream.Create;
  Stream.Write(s[1],Length(s));
  ini.WriteString('Connect','ip',IPedit.Text);
  ini.WriteString('Connect','login',LOGINedit.Text);
  ini.WriteBinaryStream('Connect','pas',Stream);
  ini.WriteString('Connect','bd',BDedit.Text);
  ini.WriteInteger('Connect','port',PORTedit.Value);
  ini.WriteInteger('Connect','pol',POLbox.ItemIndex);
  stream.Free;
  try
    Module.MyConnection1.Disconnect;
    stream:=TMemoryStream.Create;
    ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Options.ini');
    Module.MyConnection1.Server:=ini.ReadString('Connect','ip','127.0.0.1');
    Module.MyConnection1.Username:=ini.ReadString('Connect','login','root');
    ini.ReadBinaryStream('Connect','pas',Stream);
    SetLength(s,Stream.Size);
    Stream.Position:=0;
    Stream.Read(s[1],Stream.Size);
    Module.MyConnection1.Password:=Vhod.Crypt(s);
    Module.MyConnection1.Port:=ini.ReadInteger('Connect','port',3306);
    Module.MyConnection1.Database:=ini.ReadString('Connect','bd','ebup');
    Module.MyConnection1.Connect;
  except
  end;
  if Module.MyConnection1.Connected then close
  else Application.MessageBox('Невозможно подключится к серверу, Пожайлуста проверьте настройки подключения','Ошибка подключения',MB_OK);
  ini.Free;
  stream.Free;
end;
Теперь пункт pas пустой Что я сделал снова не так?
TorrentTor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу считать файл ?!?! Dimonk551 Общие вопросы C/C++ 1 17.02.2012 14:15
Считать пробел значения из INI Shouldercannon Общие вопросы Delphi 5 10.01.2012 20:27
не могу считать двумерный массив=((( pinch000 Общие вопросы C/C++ 15 02.01.2012 14:35
Считать из секции INI файла Shouldercannon Общие вопросы Delphi 5 07.06.2011 21:54
[Делфи] Ini файл.ReadInteger (за что отвечает третий параметр?) zotox Помощь студентам 2 20.07.2009 09:48