55 lines
1.1 KiB
ObjectPascal
55 lines
1.1 KiB
ObjectPascal
{ XOR-BASE64 Encrypt Filename against a String Key }
|
|
|
|
const
|
|
KEY = 'My Secret Key'; // Set your key!
|
|
DECODE = False; // "True" or "False"
|
|
|
|
function XorEnDeCrypt(const S: String): String;
|
|
var
|
|
I, IK, Code: Integer;
|
|
begin
|
|
IK := 1;
|
|
Result := '';
|
|
for I := 1 to Length(S) do
|
|
begin
|
|
if IK > Length(KEY) then IK := 1;
|
|
Code := (Ord(S[I]) xor Ord(KEY[IK]));
|
|
Result := Result + Chr(Code);
|
|
IK := IK + 1;
|
|
end;
|
|
end;
|
|
|
|
procedure ReplaceChar(var S: String; Find, Replace: Char);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I:=1 to Length(S) do
|
|
if S[I] = Find then
|
|
S[I] := Replace;
|
|
end;
|
|
|
|
function Encrypt(const S: WideString): String;
|
|
begin
|
|
Result := UTF8Encode(S);
|
|
Result := XorEnDeCrypt(Result);
|
|
Result := Base64Encode(Result);
|
|
ReplaceChar(Result, '/', '=');
|
|
end;
|
|
|
|
function Decrypt(const S: String): WideString;
|
|
var
|
|
Temp: String;
|
|
begin
|
|
Temp := S;
|
|
ReplaceChar(Temp, '=', '/');
|
|
Temp := Base64Decode(Temp);
|
|
Temp := XorEnDeCrypt(Temp);
|
|
Result := UTF8Decode(Temp);
|
|
end;
|
|
|
|
begin
|
|
if DECODE then
|
|
FileName := Decrypt(FileName)
|
|
else
|
|
FileName := Encrypt(FileName);
|
|
end. |