Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
ВнизШифрование текста в 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c