![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Шифрование текста в 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)