Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Шифрование текста в ini-файле   Найти похожие ветки 

 
FBI Agent ©   (2006-12-24 12:41) [0]

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


 
Virgo_Style ©   (2006-12-24 12:51) [1]

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


 
FBI Agent ©   (2006-12-24 15:03) [2]

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


 
allrussia ©   (2006-12-24 15:12) [3]

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;


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

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

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

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


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


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

Да


 
FBI Agent ©   (2006-12-24 15:57) [6]

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


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

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


 
allrussia ©   (2006-12-24 16:12) [8]

FBI Agent

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


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

Вот запись пароля в файл с шифрованием:
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:39) [10]

АИШ

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;


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


 
FBI Agent ©   (2006-12-24 18:56) [11]

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


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

ламеризм...


 
wl ©   (2006-12-24 20:58) [13]

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


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

FBI Agent

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


 
TStas ©   (2006-12-28 01:51) [15]

Эта функция принимает строчку, которую надо шифровать и строчку - ключ.
Возвращает шифрованную. Повторное применение расшифровывает строку. Как раз для инишек сгодится.
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;


 
ORMADA ©   (2006-12-28 07:14) [16]

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

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


 
FBI Agent ©   (2006-12-29 01:21) [17]

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


 
hero ©   (2006-12-29 09:09) [18]

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



Страницы: 1 вся ветка

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.048 c
2-1167305452
Lixodei
2006-12-28 14:30
2007.01.21
Как создать файл Exel


15-1166525265
Rouse_
2006-12-19 13:47
2007.01.21
Просто гениально!!!


6-1156092051
nordic3
2006-08-20 20:40
2007.01.21
Скриншот по сети


15-1167644806
Cyrax
2007-01-01 12:46
2007.01.21
Правильное написание фр. "Теле-, аудио-, видео-, бытовая техника"


4-1158138815
Некто_Аполло
2006-09-13 13:13
2007.01.21
Формы из DLL