Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
|
Re: Verschlüssel, in einer .ini-Datei speichern später auflö
26. Mai 2004, 15:06
Falls du auf's DEC verzichten willst so kann man eben auch mit nur ein wenig mehr Source dein Problem wesentlich sicherer lösen. Nachfolgend ein Source der den bekannten RC4 Algorithmus als Stand Alone implementiert. Man erkennt das für eine sichere Verschlüsselung nicht viel mehr Code benötigt wird als für eine unsicherer XOR Verschlüsselung.
Delphi-Quellcode:
type
TRC4Context = record
D: array[Byte] of Byte;
I,J: Byte;
end;
procedure RC4Init(var RC4: TRC4Context; const Key: String);
var
R,S,T,U: Byte;
L: Integer;
begin
L := Length(Key);
with RC4 do
begin
I := 0;
J := 0;
for S := 0 to 255 do D[S] := S;
R := 0;
U := 1;
for S := 0 to 255 do
begin
Inc(R, D[S] + Ord(Key[U]));
T := D[S];
D[S] := D[R];
D[R] := T;
Inc(U);
if U > L then U := 1;
end;
end;
end;
procedure RC4Code(var RC4: TRC4Context; const Source; var Dest; Count: Integer); overload;
var
S: Integer;
T: Byte;
begin
with RC4 do
for S := 0 to Count -1 do
begin
Inc(I);
T := D[I];
Inc(J, T);
D[I] := D[J];
D[J] := T;
Inc(T, D[I]);
TByteArray(Dest)[S] := TByteArray(Source)[S] xor D[T];
end;
end;
procedure RC4Done(var RC4: TRC4Context);
begin
FillChar(RC4, SizeOf(RC4), 0);
end;
function RC4Code(const Value, Password: String): String; overload;
var
RC4: TRC4Context;
Len: Integer;
begin
RC4Init(RC4, Password);
try
Len := Length(Value);
SetLength(Result, Len);
RC4Code(RC4, Value[1], Result[1], Len);
finally
RC4Done(RC4);
end;
end;
function BinToHexStr(const Value: String): String;
var
Size: Integer;
begin
Size := Length(Value);
SetLength(Result, Size * 2);
BinToHex(PChar(Value), PChar(Result), Size);
end;
function HexToBinStr(const Value: String): String;
var
Size: Integer;
begin
Size := (Length(Value) +1) div 2;
SetLength(Result, Size);
HexToBin(PChar(Value), PChar(Result), Size);
end;
function Encode(const Value, Password: String): String;
begin
Result := BinToHexStr(RC4Code(Value, Pasword));
end;
function Decode(const Value, Password: String): String;
begin
Result := RC4Code(HexToBinStr(Value), Password);
end;
Du rufst nun Encode() und respektive Decode() auf.
Gruß Hagen
[EDIT] Fehler im Source beseitigt !, hagen [/EDIT]
|
|
Zitat
|