Шифрування тексту в ini-файлі

Шифрування тексту в ini-файлі

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

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

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


const
# XA0; csCryptFirst = 20;
# XA0; csCryptSecond = 230;
# XA0; csCryptHeader = "";

type
# XA0; ECryptError = class (Exception);

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

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

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

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

Можна, наприклад це
N: = 0
.
N: = N + Ord (S [I]);

N це хеш (підпис, signature) ні на що, ти сам вибрав свій шлях.


> Надалі потрібно їх дешіфровивать для того, щоб
> Програма могла з ними працювати?

Так

тому що це xor)

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

Ось запис пароля в файл з шифруванням:
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

Начебто все зробив правильно, але нічого не працює, пароль шифрується нормально але ось коли намагаюся його ввести він пише що пароль невірний :(

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");

а у мене працює

ой, вибачте, я думав, що в "Іншому" сиджу, видаліть мої пости

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

Ця функція приймає рядок, яку треба шифрувати і рядок - ключ.
Повертає шифровану. Повторне застосування розшифровує рядок. Якраз для інішек згодиться.
function XorStr (const Str, KeyStr: String): String;
var
# XA0; Ln1, Ln, i, n: Integer;
# XA0; b: Byte;
begin
If Str = "" then
# XA0; begin
# XA0; Result: = "";
# XA0; exit;
# XA0; end;
If KeyStr = "" then
# XA0; begin
# XA0; Result: = Str;
# XA0; Exit;
# XA0; end;

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

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

Пам'ять: 0.76 MB
Час: 0.045 c

Схожі статті