Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Шифрование текста в ini-файле [D7, XP]


FBI Agent ©   (2006-12-24 12:41:00) 

У меня пароли записываются в ini файл, но проблема в том, что они никак не шифруются при этом. Подскажите каким алгоритмом их можно зашифровать, и в последствии нужно ли их дешифровывать для того, чтобы программа могла с ними работать?
P.s. Я в этой области новичёк, по-этому, если вам не трудно - объясните как можно доступнее...


hero   (2006-12-29 09:09:00) [1]

FBI Agent "Я всё сделал, теперь и у меня работает более-менее нормально, но вот по ходу дела, появился ещё один вопросик: "А с русским текстом этот алгоритм не работает?" Потому как у меня в программе есть 2 функции: Просмотреть пароль и скрывать его за звёздочками, так вот после того, как я ввожу его туда русскими буквами он его даже дешифровать не может, и соответственно говорит что пароль не верен. А вот с латинскими буквами всё ок."
предположение:
перед шифрованием ChartoOEM
проверка : OEMtoChar


FBI Agent   (2006-12-29 01:21:00) [2]

ORMADA ©Не подходит, т.к. у меня размер файла меньше 64 кб
TStas ©А пример можно?


ORMADA   (2006-12-28 07:14:00) [3]

http://www.degisy.com/download.php
DataFile (class TDataFile)
   (Delphi 5,6,7, C++Builder 6 with sources)  4 Kb

готовый шифрованный ini класс


TStas   (2006-12-28 01:51:00) [4]

Эта функция принимает строчку, которую надо шифровать и строчку - ключ.
Возвращает шифрованную. Повторное применение расшифровывает строку. Как раз для инишек сгодится.
function XorStr(const Str, KeyStr: String): String;
var
 Ln1, Ln, i, n: Integer;
 b: Byte;
begin
If Str = '' then
 begin
 Result := '';
 exit;
 end;
If KeyStr = '' then
 begin
 Result := Str;
 Exit;
 end;

Ln := Length(Str);
Ln1 := Length(KeyStr);
SetLength(Result, Ln);
for i := 1 to Ln do
 begin
 n := i mod Ln1;
 If n = 0 then n := Ln1;
 b := Byte(Str[i]) xor Byte(KeyStr[n]);
 Result[i] := Char(b);
 end;
end;


allrussia   (2006-12-28 00:32:00) [5]

FBI Agent

самый простой вариант:
пусть при вводе пароля автоматом раскладка переключается на латиницу, а пароль отображается звездочками. Идея ясна?


wl   (2006-12-24 20:58:00) [6]

ой, извините, я думал, что в "Прочем" сижу, удалите мои посты


wl   (2006-12-24 20:56:00) [7]

ламеризм...


FBI Agent   (2006-12-24 18:56:00) [8]

Я всё сделал, теперь и у меня работает более-менее нормально, но вот по ходу дела, появился ещё один вопросик: "А с русским текстом этот алгоритм не работает?" Потому как у меня в программе есть 2 функции: Просмотреть пароль и скрывать его за звёздочками, так вот после того, как я ввожу его туда русскими буквами он его даже дешифровать не может, и соответственно говорит что пароль не верен. А вот с латинскими буквами всё ок.


allrussia   (2006-12-24 16:39:00) [9]

АИШ

procedure TForm1.Button1Click(Sender: TObject);
var ini: TIniFile;
begin

ini:=TIniFile.Create(Application.ExeName + '.ini');
ini.WriteString('pass', '1', CryptString(Edit1.Text));
end;

procedure TForm1.Button2Click(Sender: TObject);
var ini: TIniFile;
begin
ini:=TIniFile.Create(Application.ExeName + '.ini');
if UnCryptString (ini.ReadString ('pass', '1', CryptString(Edit1.Text))) = Edit1.Text then
ShowMessage('OK');

end;


а у меня работает


АИШ   (2006-12-24 16:26:00) [10]

Вот запись пароля в файл с шифрованием:
Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'Settings.ini');
Ini.WriteString('Pass','first(1)',(CryptString(Edit1.Text)));


А вот проверка его на правильность с предварительной дешифровкой:
if (Edit1.Text = UnCryptString(Ini.ReadString('Pass','first(1)','1111'))) then begin

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


allrussia   (2006-12-24 16:12:00) [11]

FBI Agent

не в курсе - взял просто готовый пример который сам использую


MetalFan   (2006-12-24 15:59:00) [12]

потому что это xor)


FBI Agent   (2006-12-24 15:57:00) [13]

allrussia © У меня вопрос, а почему при повторном нажатии на Button2 заголовок опять шифруется?


Плохиш   (2006-12-24 15:50:00) [14]


> в последствии нужно ли их дешифровывать для того, чтобы
> программа могла с ними работать?

Да


Anatoly Podgoretsky   (2006-12-24 15:24:00) [15]

> FBI Agent  (24.12.2006 15:03:02)  [2]

Можно, например это
N := 0
...
N := N + Ord(S[I]);

N это хеш (подпись, signature)ни на что, ты сам выбрал свой путь.


allrussia   (2006-12-24 15:12:00) [16]

FBI Agent


const
 csCryptFirst = 20;
 csCryptSecond = 230;
 csCryptHeader = '';

type
 ECryptError = class(Exception);

function CryptString(Str:String):String;
var i,clen : Integer;
begin
 clen := Length(csCryptHeader);
 SetLength(Result, Length(Str)+clen);
 Move(csCryptHeader[1], Result[1], clen);
 For i := 1 to Length(Str) do
  begin
   if i mod 2 = 0 then
    Result[i+clen] := Chr(Ord(Str[i]) xor csCryptFirst)
   else
    Result[i+clen] := Chr(Ord(Str[i]) xor csCryptSecond);
  end;
end;

function UnCryptString(Str:String):String;
var i, clen : Integer;
begin
 clen := Length(csCryptHeader);
 SetLength(Result, Length(Str)-clen);
 if Copy(Str, 1, clen) <> csCryptHeader then
  raise ECryptError.Create('UnCryptString failed');

 For i := 1 to Length(Str)-clen do
  begin
   if (i) mod 2 = 0 then
    Result[i] := Chr(Ord(Str[i+clen]) xor csCryptFirst)
   else
    Result[i] := Chr(Ord(Str[i+clen]) xor csCryptSecond);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
caption:=(CryptString('FBI Agent'));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
caption:=(UnCryptString(caption));
end;


FBI Agent   (2006-12-24 15:03:00) [17]

Можно увидеть хоть какой-нибудь пример использования хэш или xor, чтобы понять смысл работы.


Virgo_Style   (2006-12-24 12:51:00) [18]

Если писать хэш, а не пароль - то расшифровывать не надо, но и пароль не восстановить, если забудешь. А если шифровать, то алгоритмы - начиная с xor'а, для новичка что-то более сложное лучше и не трогать, imho)


Наверх

Титульная страница Поиск, карта сайта Написать письмо